1、简介
1.1 什么是MyBatis?
MyBatis 是一款优秀的基于Java的持久层框架,
它支持自定义 SQL、存储过程以及高级映射。
MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。
MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型、接口和 Java POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录。
1.2 如何获得mybatis?
通过maven仓库
org.mybatis mybatis 3.5.5 GitHub 中文文档地址: https://mybatis.org/mybatis-3/zh/index.html ### 1.3 特点 简单易学:没有任何第三方依赖,最简单安装只要两个jar文件+配置几个sql映射文件。 灵活: sql写在xml里,便于统一管理和优化。 解除sql与程序代码的耦合:sql和代码的分离,提高了可维护性。 提供映射标签,支持对象与数据库的orm字段关系映射 提供对象关系映射标签,支持对象关系组建维护 提供xml标签,支持编写动态sql。 ## 2、入门 ### 2.1 从 XML 中构建 SqlSessionFactory public class MybatisUtils { private static final SqlSessionFactory sqlSessionFactory;static {
String resource = "SqlMapconfig.xml";
InputStream inputStream = null;
try {
inputStream = Resources.getResourceAsStream(resource);
} catch (IOException e) {
e.printStackTrace();
}
sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
}
public static SqlSession getSqlSession() {
return sqlSessionFactory.openSession();
// openSession(true)会自动提交事务
}
}
2.2 mybatis主配置文件
<?xml version="1.0" encoding="utf-8" ?><!-- 指定映射配置文件的位置,映射配置文件是指每个DAO独立的配置文件 -->
<mappers>
<mapper resource="UserDAO.xml"/>
</mappers>
### 2.3 编写实体类、DAO接口、DAO接口实现类 #### 2.3.1 实体类 public class User implements Serializable { private Integer id; private String username; private Date birthday; private String sex; private String address;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public Date getBirthday() {
return birthday;
}
public void setBirthday(Date birthday) {
this.birthday = birthday;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
@Override
public String toString() {
return "User{" +
"id=" + id +
", username='" + username + '\'' +
", birthday=" + birthday +
", sex='" + sex + '\'' +
", address='" + address + '\'' +
'}';
}
}
2.3.2DAO接口
public interface UserDAO {
List findAll();
}
2.3.3DAO接口实现类(UserDAO.xml)
<?xml version="1.0" encoding="UTF-8" ?> select * from user; ### 2.4 测试 Junit测试 public class MyBatisTest { @Test public void test() { // 使用自己定义工具类获取sqlSession对象 SqlSession sqlSession = MybatisUtils.getSqlSession(); // 方式一
UserDAO userDAO = sqlSession.getMapper(UserDAO.class);
List<User> users = userDAO.findAll();
// // 方式二
// List users1 = sqlSession.selectOne(“com.alinu.dao.UserDAO.findALL”);
for (User user : users){
System.out.println(user.toString());
}
sqlSession.close();
}
}
3、实现增删查改
3.1 namespace
namespace必须要写,且和接口名称要一致 ### 3.2 select查询 select * from user; #### 3.2.1 id id值要与接口中的要使用的方法名一致 #### 3.2.2 resultType resultType值为结果集返回封装类型 #### 3.2.3 模糊查询 @Test public void test6() { SqlSession sqlSession = MybatisUtils.getSqlSession(); UserDAO mapper = sqlSession.getMapper(UserDAO.class);List<User> userList = mapper.findByName("张%");
for (User user : userList) {
System.out.println(user);
}
sqlSession.close();
}
select * from user where username like #{value}; ### 3.3 insert插入 insert into user(username,birthday,sex,address) values (#{username},#{birthday},#{sex},#{address});@Test
public void test2() {
// 使用自己定义工具类获取sqlSession对象
SqlSession sqlSession = MybatisUtils.getSqlSession();
// 方式一
UserDAO userDAO = sqlSession.getMapper(UserDAO.class);
User user = new User("林新", new Date(), "男", "河南信阳");
boolean add = userDAO.add(user);
//提交事务
sqlSession.commit();
System.out.println(add);
sqlSession.close();
}
特别注意:增删改需要添加事务!!!
3.4 update修改
@Test
public void test3(){
SqlSession sqlSession = MybatisUtils.getSqlSession();
UserDAO mapper = sqlSession.getMapper(UserDAO.class);
User user = new User(1,"王菲", new Date(), "女", "北京");
boolean update = mapper.update(user);
sqlSession.commit();
System.out.println(update);
sqlSession.close();
}
update user set username = #{username}, birthday = #{birthday}, sex = #{sex}, address = #{address} where id = #{id}; ### 3.5 delete删除 // 删除用户测试 @Test public void test4() { SqlSession sqlSession = MybatisUtils.getSqlSession();UserDAO sqlSessionMapper = sqlSession.getMapper(UserDAO.class);
sqlSessionMapper.delete(22);
sqlSession.commit();
sqlSession.close();
}
delete from user where id = #{id}; ### 3.6 万能map // 使用Map作为参数的添加测试 @