1.HelloWorld
导入依赖
<!-- https://mvnrepository.com/artifact/org.mybatis/mybatis --> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.4.6</version> </dependency> <!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.47</version> </dependency>
创建一个员工数据库
CREATE TABLE `tbl_employee` ( `id` int(11) NOT NULL AUTO_INCREMENT, `last_name` varchar(255) DEFAULT NULL, `gender` char(1) DEFAULT NULL, `email` varchar(255) DEFAULT NULL ) ENGINE=InnoDB AUTO_INCREMENT=13 DEFAULT CHARSET=utf8
编写实体类
public class Employee { private Integer id; private String name; private Character gender; private String email;
... }
创建一个全局配置文件 mybatis-config.xml
全局配置文件的的具体参数后面讲
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd"> <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="root"/> </dataSource> </environment> </environments> <!-- 将写好的mapper注册到全局配置文件中 --> <mappers> <mapper resource="EmployeeMapper.xml" /> </mappers> </configuration>
编写映射文件Mapper
<?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"> <!--namespace 名称空间 作用:用于绑定接口,即使用namespace将映射文件和接口绑定,就不需要写实现类了
指定为接口的全类名 --> <mapper namespace="org.maple.dao.EmployeeMapper"> <!--id 唯一标识 :对应接口中的哪个方法 resultType 返回类型,对应实体类的Employee --> <select id="selectEmp" resultType="org.maple.pojo.Employee"> select id,last_name name,email,gender from tbl_employee where id = #{id} </select> </mapper>
编写测试类
public class MybatisTest { @Test public void test01() throws IOException { //读取配置文件 InputStream is = Resources.getResourceAsStream("mybatis-config.xml"); //创建sqlSessionFactory SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(is); //获取sqlSession实例,能直接执行已经映射的sql语句 SqlSession sqlSession = sqlSessionFactory.openSession(); //执行查询方法 try { Employee employee = sqlSession.selectOne("org.maple.dao.EmployeeMapper.selectEmp", 1); System.out.println(employee); }finally { //关闭sqlSession sqlSession.close(); } } }
2.通过接口的方式
员工Crud接口
public interface EmployeeMapper { Employee getEmpById(Integer id); }
员工Mapper文件
<?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"> <!--namespace 名称空间 作用:用于绑定接口,即使用namespace将映射文件和接口绑定,就不需要写实现类了 --> <mapper namespace="org.maple.mapper.EmployeeMapper"> <!--id 唯一标识 :对应接口中的哪个方法 resultType 返回类型,对应实体类的Employee --> <select id="getEmpById" resultType="org.maple.pojo.Employee"> select id,last_name name,email,gender from tbl_employee where id = #{id} </select> </mapper>
测试方法
public class MybatisTest { @Test public void test01() throws IOException { //读取配置文件 InputStream is = Resources.getResourceAsStream("mybatis-config.xml"); //创建sqlSessionFactory SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(is); //获取sqlSession实例,能直接执行已经映射的sql语句 SqlSession sqlSession = sqlSessionFactory.openSession(); //执行查询方法 try {
//获取接口的代理对象 EmployeeMapper mapper = sqlSession.getMapper(EmployeeMapper.class); Employee emp = mapper.getEmpById(1); System.out.println(emp); }finally { //关闭sqlSession sqlSession.close(); } } }
1、接口式编程
原生: Dao ====> DaoImpl
mybatis: Mapper ====> xxMapper.xml
2、SqlSession代表和数据库的一次会话;用完必须关闭;
3、SqlSession和connection一样都是非线程安全。每次使用都应该去获取新的对象。
4、mapper接口没有实现类,但是mybatis会为这个接口生成一个代理对象。
(将接口和xml进行绑定)
EmployeeMapper empMapper = sqlSession.getMapper(EmployeeMapper.class);
5、两个重要的配置文件:
mybatis的全局配置文件:包含数据库连接池信息,事务管理器信息等...系统运行环境信息
sql映射文件:保存了每一个sql语句的映射信息:
将sql抽取出来。
1、根据xml配置文件(全局配置文件)创建一个SqlSessionFactory对象 有数据源一些运行环境信息
2、sql映射文件;配置了每一个sql,以及sql的封装规则等。
3、将sql映射文件注册在全局配置文件中
4、写代码:
1)、根据全局配置文件得到SqlSessionFactory;
2)、使用sqlSession工厂,获取到sqlSession对象使用他来执行增删改查
一个sqlSession就是代表和数据库的一次会话,用完关闭
3)、使用sql的唯一标志来告诉MyBatis执行哪个sql。sql都是保存在sql映射文件中的。