MyBatis的相应API
1、SqlSession工厂构建器SqlSessionFactoryBuilder
常用API:SqlSessionFactory build(InputStream inputStream)
通过加载mybatis的核心文件的输入流的形式构建一个SqlSessionFactory对象
其中,mybatis-config.xml是类加载器的路径,在maven工程下就是resource资源下,Resources工具类,这个类在org.apache.ibatis.io包中。Resource类帮助你从类路径下、文件系统或一个webURL中加载资源文件。
sqkSessionFactory有多个方法创建SqlSession实例,常用的有两个
2、SqlSession会话对象
SqlSession实例在MyBatis是非常强大的一个类,在这里会看到所有执行语句、提交或回滚事务和获取映射实例的方法有
操作事务的方法主要有
Mybatis的Dao层实现
1、传统开发方式-编写UserDao接口
测试编写UserDao接口
controller包下UserController类下
package com_Dao.controller; import com_Dao.service.Impl.UserServiceImpl;import com_Dao.service.UserService;import com_mybatis.pojo.User; import java.io.IOException;import java.util.List; public class UserController { public static void main(String[] args) throws IOException { UserService userService=new UserServiceImpl(); List<User> userList = userService.findAll(); System.out.println(userList); } }service包下UserService下
接口
package com_Dao.service; import com_mybatis.pojo.User; import java.io.IOException;import java.util.List; public interface UserService { public List<User> findAll() throws IOException;}实现类下
package com_Dao.service.Impl; import com_Dao.Dao.Impl.UserDaoImpl;import com_Dao.Dao.UserDao;import com_Dao.service.UserService;import com_mybatis.pojo.User; import java.io.IOException;import java.util.List; public class UserServiceImpl implements UserService { UserDao userDao=new UserDaoImpl(); @Override public List<User> findAll() throws IOException { return userDao.findAll(); }}dao包下的UserDao下
接口下
package com_Dao.Dao; import com_mybatis.pojo.User; import java.io.IOException;import java.util.List; public interface UserDao { public List<User> findAll() throws IOException;}实现类下
package com_Dao.Dao.Impl; import com_Dao.Dao.UserDao;import com_mybatis.pojo.User;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.InputStream;import java.util.List; public class UserDaoImpl implements UserDao { @Override public List<User> findAll() throws IOException { //获得核心配置文件 InputStream resourceAsFile = Resources.getResourceAsStream("sqlMapConfig.xml"); //获得session工厂对象 SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsFile); //获得session会话对象 SqlSession sqlSession = sqlSessionFactory.openSession(); //执行操作 参数:namespace+id List<User> userList = sqlSession.selectList("userMapper.findAll"); return userList; }}其他文件,如sqlMapConfig.xml和UserMapper.xml等中的配置和之前的一致
运行结果
2、代理开发方式
介绍
采用Mybatis的电路考法方式实现Dao层的开发,这种方式是我们进入企业的主流。
Mapper接口开发方法只需要程序员编写Mapper接口(相当于Dao接口),由Mybatis框架根据接口定义创建接口的动态代理对象,代理对象的方法体同上边Dao接口实现类方法。 Mapper接口开发需要遵循以下规范:
1.Mapper.xml文件中的namespace与mapper接口的全限定名相同2.Mapper接口方法名和Mapperxml中定义的每个statement的id相同3.Mapper接口方法的输入参数类型和mapper.xml中定义的每个sql的parameterType的类型相同4.Mapper接口方法的输出参数类型和mapper.xml中定义的每个sql的resultType的类型相同规范图示对应
代码测试代理开发
UserDao下
package com_Dao_DaiLi.Dao;import com_mybatis.pojo.User;import java.io.IOException; public interface UserDao { public User findById(int id) throws IOException;}service包下
package com_Dao_DaiLi.service; import com_Dao_DaiLi.Dao.UserDao;import com_mybatis.pojo.User;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.InputStream; public class ServiceTest { public static void main(String[] args) throws IOException { InputStream resourceAsStream = Resources.getResourceAsStream("sqlMapConfig.xml"); SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream); SqlSession sqlSession = sqlSessionFactory.openSession(); UserDao mapper = sqlSession.getMapper(UserDao.class); User user = mapper.findById(1); System.out.println(user); }}UserMapper1.xml下
<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"><mapper namespace="com_Dao_DaiLi.Dao.UserDao"> <!--根据id进行查询--> <select id="findById" parameterType="int" resultType="user"> select *from user where id=#{id} </select> </mapper>还需注意将sqlMapConfig.xml下加载UserMapper1.xml下
运行结果