SSM开发框架
MyBatis使用XML将SQL与程序接耦,便于维护。
前言 MyBatis开发流程
一、引入依赖
可在pom.xml作为依赖引入
二、环境配置
1、/src/main/resource新建xxx.xml文件
三、SqlSessionFactory
文件目录/src/test/java/com.gu.mybatis/MybatisTest.java
package com.gu.mybatis; import org.apache.ibatis.io.Resources; import org.apache.ibatis.session.SqlSession; import org.apache.ibatis.session.SqlSessionFactory; import org.apache.ibatis.session.SqlSessionFactoryBuilder; import org.junit.Test; import java.io.IOException; import java.io.Reader; public class MybatisTest { @Test public void testSqlSessionFactory() { SqlSession sqlSession = null; try { // 利用Reader加载classpath下的mybaits-config.xml核心配置文件 Reader reader = Resources.getResourceAsReader("mybatis-config.xml"); // 初始化sqlSessionFactour对象,同时解析mybaits-config.xml文件 SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader); // 创建sqlSession对象,sqlsession是JDBC的扩展类,用于数据库交互 sqlSession = sqlSessionFactory.openSession(); System.out.println("SqlSession加载成功"); } catch (IOException e) { e.printStackTrace(); } finally { if(sqlSession!=null) { // 如果type是"POOLED",代表使用连接池,close则是将连接回收到连接池中 // 如果type是"UNPOOLEED",代表直连,cloes则会调用Connection.close方法关闭 sqlSession.close(); } } } }
创建mybatis的工具类
package com.gu; import org.apache.ibatis.io.Resources; import org.apache.ibatis.session.SqlSession; import org.apache.ibatis.session.SqlSessionFactory; import org.apache.ibatis.session.SqlSessionFactoryBuilder; import java.io.IOException; import java.io.Reader; public class MybatisUtils { private static SqlSessionFactory sqlSessionFactory = null; static { Reader reader = null; try { reader = Resources.getResourceAsReader("mybatis-config.xml"); } catch (IOException e) { e.printStackTrace(); throw new ExceptionInInitializerError(e); } sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader); } public static SqlSession openSession() { return sqlSessionFactory.openSession(); } public static void closeSession(SqlSession sqlSession) { if(sqlSession!=null){ sqlSession = null; } } public static void main(String[] args) { } }
四、创建mapper映射文件
文件路径/src/main/resource/mappers/goods.xml
mapper的dtd可在https://mybatis.net.cn/getting-started.html复制
在pom.xml中配置映射文件
测试文件查看
@Test public void testSqlsctAll() { SqlSession sqlSession = null; try { sqlSession = MybatisUtils.openSession(); List
实体类属性名称(驼峰命名)和数据库名称(下划线)不一样,需要做转换设置
/src/main/resource/Mybatis-config.xml
五、SQL传参
5.1 单个参数传参
映射文件
测试调用
sqlSession = MybatisUtils.openSession(); Goods goods = sqlSession.selectOne("goods.selectId", 1603);
5.2 多个参数传参
测试调用
sqlSession = MybatisUtils.openSession(); Map params = new HashMap(); params.put("min", 100); params.put("max", 500); params.put("limit", 10); List
六、多表关联查询
6.1 多表关联查询
map不保证数据顺序,可食用LinkedHashMap
@Test public void selectGoodsMap() { SqlSession sqlSession = null; try { sqlSession = MybatisUtils.openSession(); List
利用Map保存多表关联结果
6.2 ResultMap结果映射
扩展实体类/src/main/java/com/gu/dto/GoodsDTO
package com.gu.dto; import com.gu.entity.Goods; public class GoodsDTO { private Goods goods = new Goods(); private String categoryName; private String test; public Goods getGoods() { return goods; } public void setGoods(Goods goods) { this.goods = goods; } public String getCategoryName() { return categoryName; } public void setCategoryName(String categoryName) { this.categoryName = categoryName; } public String getTest() { return test; } public void setTest(String test) { this.test = test; } }
配置查询语句
测试查询
sqlSession = MybatisUtils.openSession(); List
七、MyBatis的数据插入修改和删除
前置知识:数据库事务
7.1 新增 insert
映射文件配置
测试插入
@Test public void insert() { SqlSession sqlSession = null; try { sqlSession = MybatisUtils.openSession(); Goods goods = new Goods(); goods.setTitle("测试商品01"); goods.setSubTitle("测试子标题"); goods.setOriginalCost(200f); goods.setCurrentPrice(100f); goods.setIsFreeDelivery(1); goods.setDiscount(0.5f); goods.setCategoryId(43); int num = sqlSession.insert("goods.insertGoods", goods); sqlSession.commit(); // 提交事物数据 System.out.println("num" + num); System.out.println(goods.getTitle()); } catch (Exception e) { System.out.println(e); if(sqlSession!=null) { sqlSession.rollback(); } } finally { MybatisUtils.closeSession(sqlSession); } }
7.1.1 selectKey和useGeneratedKey的区别
7.2 更新和删除
八、MyBatis注入攻击
原义传值必须程序输入,不能由用户输入
上一篇:NLP 数据增强
下一篇:哈希表题目:子域名访问计数