GitHub:https://github.com/mybatis
web项目:https://github.com/mybatis/jpetstore-6
MyBatis中文官网
1、创建JavaBean实体类
2、创建MyBatis全局配置文件
MyBatis 的全局配置文件包含了影响 MyBatis 行为甚深的设置( settings)和属性( properties)信息、如数据库连接池、事务管理器信息等。指导着MyBatis进行工作。
<configuration>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC" />
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver" />
<property name="url" value="jdbc:mysql://localhost:3306/mybatis" />
<property name="username" value="root" />
<property name="password" value="123456" />
dataSource>
environment>
environments>
<mappers>
<mapper resource="EmployeeMapper.xml" />
mappers>
configuration>
3、 创建SQL映射文件
映射文件的作用就相当于是定义Dao接口的实现类如何工作。这也是我们使用MyBatis时编写的最多的文件。
<mapper namespace="com.atguigu.mybatis.dao.EmployeeMapper">
<select id="selectEmp" resultType="com.atguigu.mybatis.bean.Employee">
select id,last_name lastName,email,gender from tbl_employee where id = #{id}
select>
mapper>
测试
1、根据全局配置文件, 利用SqlSessionFactoryBuilder创建SqlSessionFactory
public SqlSessionFactory getSqlSessionFactory() throws IOException { String resource = "mybatis-config.xml"; InputStream inputStream = Resources.getResourceAsStream(resource); return new SqlSessionFactoryBuilder().build(inputStream); }
2、使用SqlSessionFactory获取sqlSession对象。一个SqlSession对象代表和数据库的一次会话,不是线程安全的,不应该作为成员变量。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-IKsP9EYG-1591061423936)(01Mybatis入门.assets/image-20200526181647718.png)]
3、使用SqlSession根据方法id进行操作
SqlSession openSession = sqlSessionFactory.openSession(); try { //使用sql的唯一标志(名称空间.id)来告诉MyBatis执行哪个sql。sql都是保存在sql映射文件中的。 Employee employee = openSession.selectOne("com.atguigu.mybatis.EmployeeMapper.selectEmp", 1); System.out.println(employee); } finally { openSession.close(); }
1、创建JavaBean实体类
2、创建MyBatis全局配置文件
3、创建一个Dao接口
public interface EmployeeMapper {
public Employee getEmpById(Integer id);
}
4、修改Mapper映射文件的名称空间和Id
<mapper namespace="com.atguigu.mybatis.dao.EmployeeMapper">
<select id="getEmpById" resultType="com.atguigu.mybatis.bean.Employee">
select id,last_name lastName,email,gender from tbl_employee where id = #{id}
select>
mapper>
(1)Mapper接口方法名和mapper.xml中定义的每个sql的id相同;
(2)Mapper接口方法的输入参数类型和mapper.xml中定义的每个sql 的parameterType的类型相同;
(3)Mapper接口方法的输出参数类型和mapper.xml中定义的每个sql的resultType的类型相同;
(4)Mapper.xml文件中的namespace即是mapper接口的类路径。
测试
1、根据全局配置文件, 利用SqlSessionFactoryBuilder创建SqlSessionFactory
2、使用SqlSessionFactory获取sqlSession对象。
3、获取接口的实现类对象:会为接口自动的创建一个代理对象,代理对象去执行增删改查方法
SqlSession openSession = sqlSessionFactory.openSession(); try { EmployeeMapper mapper = openSession.getMapper(EmployeeMapper.class);//代理类 Employee employee = mapper.getEmpById(1); System.out.println(mapper.getClass());//Proxy System.out.println(employee); } finally { openSession.close(); }
SqlSession 的实例不是线程安全的,因此是不能被共享的。
SqlSession每次使用完成后需要正确关闭,这个关闭操作是必须的 SqlSession可以直接调用方法的id进行数据库操作,但是我们一般还是推荐使用SqlSession获取到Dao接口的代理类,执行代理对象的方法,可以更安全的进行类型检查操作