使用mybatis编写入门案例
操作的表和对应的实体类
public class Employee {
private Integer id;
private String lastName;
private String email;
private String gender;
constructor...
getter and setter...
}
一.引入依赖
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.4.5</version>
</dependency>
二.编写mybatis的全局配置文件
<?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="123456" />
</dataSource>
</environment>
</environments>
<!-- 将映射文件(EmployeeMapper.xml)注册到全局配置文件(mybatis-config.xml)中 -->
<mappers>
<mapper resource="EmployeeMapper.xml" />
</mappers>
</configuration>
三.编写实体类的映射文件
<?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.tt.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>
四.编写mapper接口
public interface EmployeeMapper {
public Employee getEmpById(Integer id);
}
五.测试
public class MyBatisTest {
@Test
public void test01() throws IOException {
// 1、获取sqlSessionFactory对象
SqlSessionFactory sqlSessionFactory = getSqlSessionFactory();
// 2、获取sqlSession对象
SqlSession sqlSession = sqlSessionFactory.openSession();
try {
// 3、获取接口的代理对象去执行增删改查方法
EmployeeMapper mapper = sqlSession.getMapper(EmployeeMapper.class);
Employee employee = mapper.getEmpById(1);
System.out.println(mapper.getClass()); //${proxy}
System.out.println(employee);
} finally {
openSession.close();
}
}
// 根据全局配置文件创建sqlSessionFactory
public SqlSessionFactory getSqlSessionFactory() throws IOException {
String resource = "mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
return new SqlSessionFactoryBuilder().build(inputStream);
}
}
Tips:
- mybatis全局配置文件:包含数据库连接池信息、事务管理器信息、系统运行环境信息等、mapper映射文件的路径。和Spring整合后,里面的所有设置都可以在Spring配置文件中配置。
- mapper映射文件:配置了实体类对应的sql,以及sql的封装规则
mapper文件和mapper接口如何实现映射:
1.namespace:名称空间,与mapper接口的全类名对应
2.id:唯一标识,与mapper接口的方法名对应
3.parameterType:接口方法参数的类型一致
4.resultType:返回结果的类型一致
mybatis推荐使用接口式编程(即入门案例):
- 根据全局配置文件创建一个SqlSessionFactory对象
- 使用SqlSessionFactory,获取到sqlSession对象。【SqlSession代表和数据库的一次会话,用完必须关闭。】
- sqlSession为mapper接口生成一个代理对象根据sql的唯一标识来执行具体的sql。
附 简单的增删改查
<?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.tt.mybatis.dao.EmployeeMapper">
<!-- public void addEmp(Employee employee); -->
<insert id="addEmp" parameterType="com.tt.mybatis.bean.Employee">
insert into tbl_employee(lastName,email,gender)
values(#{lastName},#{email},#{gender})
</insert>
<!-- public void updateEmp(Employee employee); -->
<update id="updateEmp" parameterType="com.tt.mybatis.bean.Employee">
update tbl_employee
set lastName=#{lastName},email=#{email},gender=#{gender}
where id = #{id}
</update>
<!-- public void deleteEmpById(Integer id); -->
<delete id="deleteEmpById">
delete from tbl_employee where id = #{id}
</delete>
<!-- public Employee getEmpById(Integer id); -->
<select id="getEmpById" resultType="com.tt.mybatis.bean.Employee">
select * from tbl_employee where id = #{id}
</select>
<!-- public List<Employee> getEmpByLastNameLike(String lastName); -->
<select id="getEmpByLastNameLike" resultType="com.tt.mybatis.bean.Employee">
select * from employees where lastName like #{lastName}
</select>
</mapper>
模糊查询(四种方式)
<!-- public List<Employee> getEmpByLastNameLike(String lastName); -->
<!-- 方法传递参数为“%范%” -->
<select id="getEmpByLastNameLike" resultType="com.tt.mybatis.bean.Employee">
select * from employees where lastName like #{lastName}
</select>
<!-- 方法传递参数为“张”,但是通过${}取值拼接字符串,没有预编译,容易被sql注入 -->
<select id="getEmpByLastNameLike" resultType="com.tt.mybatis.bean.Employee">
select * from employees where lastName like '%${value}%'
</select>
<!-- 推荐下面两种方式 -->
<!-- 方法传递参数为“张”,使用bind标签 -->
<select id="getEmpByLastNameLike" resultType="com.tt.mybatis.bean.Employee">
<bind name="myLastName" value="'%'+lastName+'%'">
select * from employees where lastName like #{myLastName}
</select>
<!-- 方法传递参数为“张”,使用concat函数 -->
<select id="getEmpByLastNameLike" resultType="com.tt.mybatis.bean.Employee">
select * from employees where lastName like CONCAT('%',#{keywords},'%')
</select>