先看一张图
不难发现, mybatis就是通过映射文件来管理sql语句的, 不再是传统的将sql语句写在代码中, 将sql和代码分开解耦了.
注意点:
insert into tb_user value (#{id},#{name},#{age})
@Test public void test2() throws IOException { //模拟数据 User user = new User(); user.setId(3); user.setName("hahaha"); user.setAge(20); //加载核心配置文件 Resources就是mybatis框架提供的, 注意是在org.apache.ibatis.io.Resources包下 InputStream resourceAsStream = Resources.getResourceAsStream("sqlMapperConfig.xml"); //就在resources下, 直接写 //获取session工厂对象 SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream); //获取会话对象 SqlSession sqlSession = sqlSessionFactory.openSession(); //执行 *** 作 参数就是, namespace+id int insert = sqlSession.insert("userMapper.save",user); //测试, 打印出来数据 System.out.println(insert); //mybatis的更新 *** 作默认是不提交事务的 sqlSession.commit(); //释放资源 sqlSession.close(); }
有人可能会问返回值是什么, 配置时为什么不用加resultType属性
update tb_user set name = #{name} , age = #{age} where id = #{id}
@Test public void test3() throws IOException { //模拟数据 User user = new User(); user.setId(3); user.setName("hehehe"); user.setAge(21); //加载核心配置文件 Resources就是mybatis框架提供的, 注意是在org.apache.ibatis.io.Resources包下 InputStream resourceAsStream = Resources.getResourceAsStream("sqlMapperConfig.xml"); //就在resources下, 直接写 //获取session工厂对象 SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream); //获取会话对象 SqlSession sqlSession = sqlSessionFactory.openSession(); //执行 *** 作 参数就是, namespace+id int num = sqlSession.update("userMapper.update",user); //测试, 打印出来数据 System.out.println(num); //mybatis的更新 *** 作默认是不提交事务的 sqlSession.commit(); //释放资源 sqlSession.close(); }1.3 删除 *** 作
delete from tb_user where id = #{id}
@Test public void test4() throws IOException { //加载核心配置文件 Resources就是mybatis框架提供的, 注意是在org.apache.ibatis.io.Resources包下 InputStream resourceAsStream = Resources.getResourceAsStream("sqlMapperConfig.xml"); //就在resources下, 直接写 //获取session工厂对象 SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream); //获取会话对象 SqlSession sqlSession = sqlSessionFactory.openSession(); //执行 *** 作 参数就是, namespace+id int num = sqlSession.delete("userMapper.delete",6); //测试, 打印出来数据 System.out.println(num); //mybatis的更新 *** 作默认是不提交事务的 sqlSession.commit(); //释放资源 sqlSession.close(); }1.4 小结
可见, 更新 *** 作的返回值都是int, 表示生效的行数
如果sqlSessionFactory.openSession(); 开启事务会话
也就是默认的不自动提交
更新 *** 作是不会自动提交到数据库的. 但是查询 *** 作可以随表查
查询 *** 作就是两个api, 一个是one一个是list
接下来学习映射文件深入的部份, 以上都是简单的入门
2. 映射文件深入学习首先就要认识mybatis的映射文件真正的作用是什么, 以上的学习, 我们只知道映射文件可以写我们的sql语句, 配置好sql语句之后, 使用时可以通过namespace+id来锁定要的sql语句
mybatis是用在dao层的框架, 映射文件里配置和存放sql语句和dao层又有什么关系呢
在以前javaweb阶段我们学习到, dao层的存在是为业务层的方法提供基础
传统的方法就是, dao层的接口要我们自己写实现类来实现方法, sql语句在这个过程中也会和实现类耦合在一起, 也就是说, mybatis的存在, 可以将传统的方法改变成, 接口+映射文件的形式, 不再需要我们自己写dao层的实现类了, 这样一来不就使得代码和sql语句分开了吗, 也体现了框架面向接口和配置文件做项目的目的.
那么, 怎么实现映射文件来取代实现类, 就是我们学习的重点
2.1 代理开发模式
例如
说白了, 实现类不用写了, mybatis自动会给我们创建代理对象
也就是说, 不再是直接使用namespace+id
而是使用getMapper(接口类)获取代理对象
在通过代理对象锁定sql
动态的sql极大的方便了sql的使用
因为当你给不同的参数
就会动态的执行不同的sql
@Test public void test5() throws IOException { //模拟数据 User user = new User(); //user.setId(4); user.setName("lll"); //user.setAge(21); //加载核心配置文件 Resources就是mybatis框架提供的, 注意是在org.apache.ibatis.io.Resources包下 InputStream resourceAsStream = Resources.getResourceAsStream("sqlMapperConfig.xml"); //就在resources下, 直接写 //获取session工厂对象 SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream); //获取会话对象 SqlSession sqlSession = sqlSessionFactory.openSession(); //获取代理对象 UserMapper mapper = sqlSession.getMapper(UserMapper.class); List2.2.2 foreachuserList = mapper.findByCondition(user); //测试, 打印出来数据 System.out.println(userList); //mybatis的更新 *** 作默认是不提交事务的 sqlSession.commit(); //释放资源 sqlSession.close(); }
@Test public void test6() throws IOException { //模拟数据 List2.3 sql片段的抽取list = new ArrayList (); list.add(1); list.add(2); list.add(3); //加载核心配置文件 Resources就是mybatis框架提供的, 注意是在org.apache.ibatis.io.Resources包下 InputStream resourceAsStream = Resources.getResourceAsStream("sqlMapperConfig.xml"); //就在resources下, 直接写 //获取session工厂对象 SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream); //获取会话对象 SqlSession sqlSession = sqlSessionFactory.openSession(); //获取代理对象 UserMapper mapper = sqlSession.getMapper(UserMapper.class); List userList = mapper.findByIds(list); //测试, 打印出来数据 System.out.println(userList); //mybatis的更新 *** 作默认是不提交事务的 sqlSession.commit(); //释放资源 sqlSession.close(); }
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)