mybatis的编写流程
1.dao:编写功能接口,并通过注解配置SQL语句
2.配置:编写核心配置文件SqlMapConfig.xml,用于配置数据源,用于加载接口
3.测试:编写Mybatis框架测试代码
入门小案例
案例需求:查询user表中所有的用户信息
环境:1.创建maven项目导入mybatis的pom包 2.创建数据库和表 3.编写连接db的xml核心配置文件 4.编写mapper功能接口 和user对象 5.测试类
1
<dependencies>
<!-- mybatis核心依赖 -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.5</version>
</dependency>
<dependency>
<groupId>tk.mybatis</groupId>
<artifactId>mapper</artifactId>
<version>4.1.5</version>
</dependency>
<!-- mysql连接依赖 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.5</version>
</dependency>
<!-- junit测试 -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.13</version>
<scope>test</scope>
</dependency>
<!-- log4j日志依赖 -->
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
</dependencies>
2
CREATE DATABASE day20200917mybatis
CREATE TABLE `user` (
`uid` INT(11) NOT NULL AUTO_INCREMENT PRIMARY KEY,
`username` VARCHAR(32) NOT NULL COMMENT '用户名称',
`birthday` DATE DEFAULT NULL COMMENT '生日',
`sex` CHAR(1) DEFAULT NULL COMMENT '性别',
`address` VARCHAR(256) DEFAULT NULL COMMENT '地址'
);
-- 测试数据
INSERT INTO `user`(`uid`,`username`,`birthday`,`sex`,`address`) VALUES ( NULL,'zhangsan','1999-09-09','男','北京');
INSERT INTO `user`(`uid`,`username`,`birthday`,`sex`,`address`) VALUES ( NULL,'lisi','2000-01-01','女','上海');
3
<?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>
<!--引入jdbc属性配置-->
<properties resource="jdbc.properties"></properties>
<!--mybatis的核心环境配置-->
<environments default="development">
<environment id="development">
<!--
在 MyBatis 中有两种类型的事务管理器(也就是 type="[JDBC|MANAGED]"):
JDBC – 这个配置直接使用了 JDBC 的提交和回滚设施
MANAGED – 这个配置几乎没做什么
-->
<transactionManager type="JDBC"/>
<!--type可选值:UNPOOLED 不使用连接池
POOLED使用连接池
JNDI 从配置好的JNDI数据源获取连接池-->
<dataSource type="POOLED">
<property name="driver" value="${driver}"/>
<property name="url" value="${url}"/>
<property name="username" value="${username}"/>
<property name="password" value="${password}"/>
</dataSource>
</environment>
</environments>
<mappers>
<package name="com.czxy.dao"/>
</mappers>
</configuration>
4
package com.czxy.dao;
import com.czxy.domain.User;
import org.apache.ibatis.annotations.*;
import java.util.List;
public interface UserDao {
//模糊查询
@Select("select * from user where username like #{username}")
public List<User> findusername(@Param("username") String username);
//查询所有
@Select("select * from user")
public List<User>finAllUser();
//插入数据
@Insert("insert into user(username,birthday,sex,address) values (#{username},#{birthday},#{sex},#{address})")
public void insert(User user);
//删除数据
@Delete("delete from user where uid=#{uid}")
public void delete(@Param("uid") Integer uid);
//修改数据
@Update("update user set address=#{address} where uid=#{uid}")
public void updata(@Param("address") String address,@Param("uid")Integer uid);
}
5
这里需要使用MyBatis提供的API来获取UserMapper接口的实现类对象,步骤如下:
资源:通过XML配置文件得到IO流对象;
工厂:创建构造者对象,使用IO流对象调用构造者对象的构造方法得到工厂对象;
会话:调用工厂的openSession()方法得到会话对象;
DAO:调用会话方法的getMapper()方法得到DAO接口的实现类对象
package com.czxy.Test;
import com.czxy.dao.UserDao;
import com.czxy.domain.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 org.junit.jupiter.api.Test;
import java.io.IOException;
import java.io.InputStream;
import java.util.Date;
import java.util.List;
public class findAllUser {
//1.加载配置文件 得到连接工厂 获取连接
static InputStream is;
static {
try {
is = Resources.getResourceAsStream("mybatis-config.xml");
} catch (IOException e) {
e.printStackTrace();
}
}
static SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(is);
static SqlSession sqlSession = factory.openSession();
//2.获取对应mapper对象
static UserDao mapper = sqlSession.getMapper(UserDao.class);
/**
* 查询所有user
* @throws IOException
*/
@Test
public void findAllUser() throws IOException {
//3.执行查询
List<User> list = mapper.finAllUser();
for (User user : list) {
System.out.println(user);
}
//4.关闭资源
sqlSession.close();
}
/**
* 模糊查询username
*/
@Test
public void findusername(){
List<User> user = mapper.findusername("%lis%");
System.out.println(user);
sqlSession.close();
}
/**
* 添加user对象到表中
*/
@Test
public void insertuser(){
User user = new User(null, "jack", new Date(), "男", "江苏");
mapper.insert(user);
sqlSession .commit();
sqlSession.close();
}
/**
* 删除
*/
@Test
public void delete(){
mapper.delete(3);
sqlSession.commit();
sqlSession.close();
}
/**
* 修改
*/
@Test
public void update(){
mapper.updata("重庆",2);
sqlSession.commit();
sqlSession.close();
}
}