说明:
对象关系映射框架,操作数据库数据
主要依赖jar包:mybatis-x.x.x.jar、mysql-connector-java-x.x.x.jar
其他依赖jar包:ant-x.x.x.jar、ant-launcher-x.x.x.jar、asm-x.x.jar、cglib-x.x.xx.jar、commons-logging-x.x.jar、javassist-x.x.x-GA.jar、log4j-x.x.x.jar、log4j-api-x.x.x.jar、log4j-core-x.x.x.jar、ognl-x.x.x.jar、slf4j-api-x.x.x.jar、slf4j-log4j12-x.x.x.jar
一、配置连接池、对象映射:
1.配置连接池,加载对象映射配置文件:
(1)新建jdbc.properties,配置连接信息:
driver=com.mysql.cj.jdbc.Driver
url=jdbc:mysql://localhost:3306/mydb?serverTimezone=UTC
username=root
password=root
(2)新建mybatis-config.xml,加载jdbc.properties,配置连接池:
(3)加载对象映射配置文件:
第1种,直接加载配置文件方式:
第2种,类扫描方式,自动加载同名配置文件:
2.新建user.xml,配置对象映射文件:
二、普通Dao方式,增删改查:
1.插入数据:
(1)配置插入sql语句,在user.xml文件的
自增主键生成,利用useGeneratedKeys属性:
或者,自增主键生成,利用
select last_insert_id()
插入sql语句配置:
select last_insert_id()
insert into user(id,name) values(#{id},#{name})
(2)实现插入数据方法:
private static SqlSessionFactory sFactory;
static {
try {
// 1.获取mybatis-config.xml输入流
InputStream in = Resources.getResourceAsStream("mybatis-config.xml");
// 2.创建SqlSession工厂类
sFactory = new SqlSessionFactoryBuilder().build(in);
} catch (IOException e) {
e.printStackTrace();
}
}
// 插入数据
public void insert(User user) throws IOException {
// 1.创建SqlSession,openSession(true)为开启自动提交事务
SqlSession session = sFactory.openSession();
// 2.执行插入语句,user为user.xml中,sql_insert为
2.更新数据:
(1)配置更新sql语句,在user.xml文件的
update user set name=#{name} where id=#{id}
(2)实现更新数据方法:
// 更新数据
public void update(User user) throws IOException {
// 1.创建SqlSession,openSession(true)为开启自动提交事务
SqlSession session = sFactory.openSession(true);
// 2.执行更新语句,user为user.xml中,sql_update为
3. 查询单个数据:
(1)配置查询单个sql语句,在user.xml文件的
(2)实现查询单个数据方法:
// 查询单个数据
public void query(String name) throws IOException {
// 1.创建SqlSession
SqlSession session = sFactory.openSession();
// 2.执行查询语句,user为user.xml中,sql_query为
4. 查询列表数据:
(1)配置查询List列表sql语句,在user.xml文件的
(2)实现查询列表数据方法:
// 查询列表数据
public void queryList() throws IOException {
// 1.创建SqlSession,openSession(true)为开启自动提交事务
SqlSession session = sFactory.openSession();
// 2.执行查询列表语句,user为user.xml中,sql_query_list为
5.模糊查询数据:
(1)配置模糊查询sql语句,在user.xml文件的
(2)实现模糊查询数据方法:
// 模糊查询数据
public void search(String key) throws IOException {
// 1.创建SqlSession
SqlSession session = sFactory.openSession();
// 2.执行模糊查询语句,user为user.xml中,sql_query_like为
6.删除数据:
(1)配置删除sql语句,在user.xml文件的
delete from user where name=#{name}
(2)实现删除数据方法:
// 删除数据
public void delete(String name) throws IOException {
// 1.创建SqlSession,openSession(true)为开启自动提交事务
SqlSession session = sFactory.openSession(true);
// 2.执行删除语句,user为user.xml中,sql_delete为
三、动态代理方式,增删改查:
说明:由系统自动生成Dao实现类。
规则:
namespace属性值填Dao接口带包名;
Dao接口方法名与
1.Dao接口,会自动生成实现类:
public interface UserMapper {
// 查询
public User query(String name);
}
2.配置sql语句(保证方法返回值、参数、方法名和接口定义一致),在user.xml文件的
3.实现数据增删改查:
private static SqlSessionFactory sFactory;
static {
try {
// 1.获取mybatis-config.xml输入流
InputStream in = Resources.getResourceAsStream("mybatis-config.xml");
// 2.创建SqlSession工厂类
sFactory = new SqlSessionFactoryBuilder().build(in);
} catch (IOException e) {
e.printStackTrace();
}
}
// 测试查询方法
public void testQuery(String name) throws IOException {
// 1.创建SqlSession
SqlSession session = sFactory.openSession();
// 2.获取Dao自动实现类
UserMapper dao = session.getMapper(UserMapper.class);
// 3.执行查询语句
User user = dao.query(name);
// 4.关闭连接
session.close();
}
四、别名使用(不区分大小写):
1.单个方式:
(1)定义别名,在mybatis-config.xml的
(2)使用别名,在user.xml:
2.包扫描方式:
(1)定义别名,在mybatis-config.xml的
(2)使用别名,在user.xml:
五、resultMap使用:
作用:当列名与属性名不一致时,将列名与属性名关联起来。在单表查询时,列名与属性名一致时不用配置。
1.定义resultMap,在对象映射文件UserMapper.xml的
2.使用resultMap,在对象映射文件UserMapper.xml的
五、动态sql使用(在sql标签内部使用标签):
1.
作用:在sql标签内部直接使用if判断。
2.
作用:给sql加上where。
3.sql片段:
作用:定义通用sql,供其他sql标签中使用。
(1)定义 sql片段:
where name=#{name}
(2)使用sql片段:
4.
作用:在sql标签中循环赋值,放在