-
My Batis 是一款优秀的持久层 框架,用于简化JDBC的开发
-
官网
持久层:
- 负责将数据保存到数据库的那一层代码。
- JavaEE三层架构:表现层,业务层,持久层
框架:
- 框架就是一个半成品软件,是一套可重用的,通用的,软件基础代码模型
- 在框架的基础之上构建软件编写更加高效,规范,通用,可扩展
- 硬编码
- 注册驱动,获取连接
- SQL语句
- 操作繁琐
- 手动设置参数
- 手动封装结果集
//原始jdbc操作(查询数据)
//注册驱动
Class.forName("com.mysql.cj.jdbc.Driver");
//获得连接
Connection connection = DriverManager.getConnection("jdbc:mysql:///test","root","rootpassword");
//获得statement
PreparedStatement statement = connection.prepareStatement("select id,username,passwod from user");
//执行查询
ResultSet resultSet = statement.executeQuery();
//遍历结果集
while(resultSet.next()){
//封装实体
User user = new User();
user.setId(resultSet.getInt("id"));
user.setUsername(resultSet.getString("username"));
user.setPassword(resultSet.getString("password"));
}
//释放资源
resultSet.close();
statement.close();
connection.close();
My Batis简化
- 硬编码 ------> 配置文件
- 操作简化 -------> 自动完成
查询表中所有的数据:
- 创建表,添加数据
- 创建模块,导入坐标
- 编写My Batis 核心配置文件 ----> 替换连接信息解决硬编码问题
- 编写SQL映射文件 ——>统一管理SQL语句,解决硬编码问题
- 编码:
- 定义POJO类
- 加载核心配置文件,获取SQLSessionFactory对象
- 获取sqlSession对象,执行SQL语句
- 释放资源
Mapper代理开发: My Batis核心配置文件: MyBatis 核心配置文件的顶层结构如下:select * from tb_user;
-
configuration (配置)
- properties (属性)
- settings(设置)
- typeAliases(类型别名)
- typeHandlers(类型处理器)
- objectFactory(对象工厂)
- environments(环境变量)
- environment(环境变量)
- transactionManager(事务管理器)
- dataSource(数据源)
- databaseldProvider(数据库厂商标志)
- mappers(映射器)
-
类性别名(typeAliases)
安装My Batisx插件:
- 打开Settings
- 点击plugins
- 搜索mybatisx
- 点击下载
MyBatis完成需要三步:
- 编写接口方法
- 编写SQL
- 执行方法
分析出三件事:
- SQL语句怎么写
- 完成这个功能要不要参数
- 完成之后返回怎么样的结果
步骤:
-
编写接口方法:Mapper几口
–>参数:无
–>结果:List
-
编写SQL语句:SQL映射文件;
-
执行方法,测试
Listselect();
resultMap映射 ID主键 result一般建
测试类模板:
import com.tingli.pojo.User;
import com.tingli.mapper.UserMapper;
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.Test;
import java.io.InputStream;
import java.util.List;
public class Mytest {
@Test
public void selectAll() throws Exception {
//获取SqlSessionFactory
String resource = "mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
//获取SqlSessiion对象
SqlSession sqlSession = sqlSessionFactory.openSession();
//获取Mapper接口的代理对象
UserMapper usermapper = sqlSession.getMapper(UserMapper.class);
//执行方法
List users = usermapper.selectAll();
System.out.println(users);
//释放资源
sqlSession.close();
}
}
时区报错:
插入
-
编写数据库表
-
编写UserMapper.xml
insert into user values(#{id},#{username},#{password}) -
编写UserMapper接口的插入方法
import com.tingli.domain.User; import org.apache.ibatis.annotations.Select; import java.util.List; public interface UserMapper { //查询 ListfingAll(); //插入 User save(); } -
编写测试文件
@Test public void test2() throws Exception { //获得核心配置文件 InputStream resourceAsStream = Resources.getResourceAsStream("sqlMapConfig.xml"); //获得SQLSession工厂对象 SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream); //获得session对话 SqlSession sqlSession = sqlSessionFactory.openSession(); //执行操作 User user = new User(); user.setId(7); user.setUsername("tom"); user.setPassword("abc"); sqlSession.insert("com.tingli.mapper.UserMapper.save",user); //提交 sqlSession.commit(); //释放资源 sqlSession.close(); } //注意: 插入操作需要提交事务,否则无法传递到数据库修改-
编写数据库
-
编写UserMapper.xml
update user set username = #{username},password = #{password} where id = #{id} -
编写UserMapper接口的修改方法
public interface UserMapper { //查询 ListfingAll(); //插入 User save(); //修改 User update(); } -
编写测试文件
//修改 @Test public void test3() throws Exception { //获得核心配置文件 InputStream resourceAsStream = Resources.getResourceAsStream("sqlMapConfig.xml"); //获得SQLSession工厂对象 SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream); //获得session对话 SqlSession sqlSession = sqlSessionFactory.openSession(); //执行操作 User user = new User(); user.setId(7); user.setUsername("lucy"); user.setPassword("123"); sqlSession.update("com.tingli.mapper.UserMapper.update",user); //提交 sqlSession.commit(); //释放资源 sqlSession.close(); }
-
-
编写数据库
-
编写UserMapper.xm
delete from user where id = #{id} -
编写UserMapper接口的删除方法
import com.tingli.domain.User; import org.apache.ibatis.annotations.Select; import java.util.List; public interface UserMapper { //删除 Integer delete(); } -
编写测试文件
//删除 @Test public void test4() throws Exception { //获得核心配置文件 InputStream resourceAsStream = Resources.getResourceAsStream("sqlMapConfig.xml"); //获得SQLSession工厂对象 SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream); //获得session对话 SqlSession sqlSession = sqlSessionFactory.openSession(); //执行操作 User user = new User(); user.setId(7); sqlSession.delete("com.tingli.mapper.UserMapper.delete",user); //提交 sqlSession.commit(); //释放资源 sqlSession.close(); }查询操作为另一张表,其他操作同一张表
在测试类之前创建数据库表的实体类User ,接口UserMapper与UserMapper.xml目录名相同,名称相同否则运行报错



