测试环境
1. JDK 1.8
2. IntelliJ IDEA 2020.1.2 x64
3. Navicat Premium 16
使用MyBatis构建项目
1. 加入jar
2. 配置文件 设置数据源 数据库连接池
一定要更换为自己数据库名和密码
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"https://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<!-- 环境 default=development 使用的默认的环境的id是development-->
<!-- 打印日志 -->
<settings>
<setting name="logImpl" value="STDOUT_LOGGING"/>
</settings>
<environments default="development">
<environment id="development">
<!-- 事务管理器-->
<transactionManager type="JDBC"/>
<!-- 数据源 type =pooled -->
<dataSource type="POOLED">
<!-- basedb driver mysql8的jar 必须是加cj-->
<property name="driver" value="com.mysql.cj.jdbc.Driver"/>
<!-- mysql8的时候一定要加时区不加的话 时间会错8个小时 2024-5-28 10:53:00 -->
<property name="url" value="jdbc:mysql://localhost:3306/sanqi?useSSL=false&serverTimezone=Asia/Shanghai"/>
<!-- 连接数据库的名字-->
<property name="username" value="root"/>
<!-- 连接数据库的密码-->
<property name="password" value="root"/>
</dataSource>
</environment>
</environments>
</configuration>
3. 创建Mapper.xml文件
MyBatis是"半自动"的ORM框架,即SQL语句需要开发者自定义,MyBatis的关注点在pojq(java对象)和SQL之间的映射关系。那么简单来说,Mapper文件其实就是主要用来存放SQL语句的。
文件内容
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "https://mybatis.org/dtd/mybatis-3-mapper.dtd"> <!-- namespace 命名空间 接口--> <mapper namespace="org.example.dao.IEmpMapper">一定要写自己的接口路径 </mapper>
4. dao接口
名字IEmpMapper
Emp是我的实体类名
/**
* 查询所有的信息
* select
* 方法名字是 findAll
* List<> Emp
* @return
*/
List<Emp> findAll(Integer page);
/**
* 添加
*/
int addEmp(Emp emp);
/**
* 修改
*/
int updateEmp(Emp emp);
/**
* 删除
*/
int deleteEmp(Emp emp);
/**
* 添加之后返回自动整张的主键
*/
int addEmp2(Emp emp);
5. 将Mapper文件注入项目
在Mapper的核心的配置文件</environments>下加入
<mappers>
<!-- <mapper resource="org/mybatis/example/BlogMapper.xml"/>-->
<!-- mapper 文件 写出来 -->
<mapper resource="mapper/EmpMapper.xml"></mapper>
</mappers>
6. 测试
读取配置文件
构建sqlsessionFactory
SqlSession
获取Mapper文件
执行SQl
public static void main(String[] args) throws IOException {
// SqlsessionFactory
// 持久层 连接数据库
// mybatis.xml
// 读取mybatis。xml
InputStream resourceAsStream = Resources.getResourceAsStream("mybatis.xml");
// 构建了一个SqlSessionFactory
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(resourceAsStream);
SqlSession sqlSession = factory.openSession();
//
IEmpMapper mapper = sqlSession.getMapper(IEmpMapper.class);
List<Emp> all = mapper.findAll();
System.out.println("all = " + all);
}
7.增删改查方法
关键词: 增 <insert> 删<delete> 改<update> 查<select>
SQL 代码中是不区分大小写的,大写或小写都可以
<!-- id 代表的是方法的名字-->
<!-- List<Emp>-->
<!-- 当实体类的属性名和列名保持一致的时候 返回值可以使用resultType=“泛型的包名加类名 Emp” -->
<!-- sql语句结尾一定不能写;!!!!!!!!!!!!!!!!!!!!!!!!!1-->
7.1 新增
dao接口上边已经有了 直接编写mapper文件 注意一定要写入<mapper>标签里面
<!--参数是一个实体类 使用实体类中的属性名的时候直接使用 #{实体类中的属性名} -->
<insert id="addEmp" parameterType="org.example.entity.Emp">
insert into emp(ename,status,createtime,deptno,pwd)
values(#{ename},#{status},#{createtime},#{deptno},#{pwd})
</insert>
注意事项:
取值时候使用的是#{}
取的是实体类中的属性的值 #{实体类的属性}
测试:
public static void main(String[] args) throws IOException {
// SqlsessionFactory
// 持久层 连接数据库
// mybatis.xml
// 读取mybatis。xml
InputStream resourceAsStream = Resources.getResourceAsStream("mybatis.xml");
// 构建了一个SqlSessionFactory
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(resourceAsStream);
SqlSession sqlSession = factory.openSession();
//
IEmpMapper mapper = sqlSession.getMapper(IEmpMapper.class);
// List<Emp> all = mapper.findAll(1);
// System.out.println("all = " + all);
Emp emp = new Emp();
emp.setEname("testA369000");
emp.setPwd("78787878");
emp.setDeptno(1);
emp.setStatus(1);
emp.setCreatetime(new Date());
mapper.addEmp(emp);
// 添加 修改 删除 手动提交事务
// 数据库设置的是自动提交 mybatis 手动提交 自己提交事务
// 提交事务
sqlSession.commit();// 提交事务
// 关闭连接
sqlSession.close();
}
注意:添加修改删除的时候必须手动的提交事务
7.2 删除
编写mapper文件 注意一定要写入<mapper>标签里面
<delete id="deleteEmp">
delete from emp where empno=#{empno}
</delete>
test代码 delete是方法名 需要调用
public static void main(String[] args) {
delete();
}
public static void delete(){
SqlSessionFactory sqlSessionFactory = SqlSessionFactoryUtil.getSqlSessionFactory();
SqlSession sqlSession = sqlSessionFactory.openSession();
IEmpMapper mapper = sqlSession.getMapper(IEmpMapper.class);
Emp emp = new Emp();
emp.setEmpno(9);
mapper.addEmp(emp);
sqlSession.commit();
sqlSession.close();
}
7.3 修改
编写mapper文件 注意一定要写入<mapper>标签里面
<update id="updateEmp">
update emp set ename=#{ename} where empno=#{empno}
</update>
test代码 update是方法名 需要调用
public static void main(String[] args) {
update();
}
public static void update(){
SqlSessionFactory sqlSessionFactory = SqlSessionFactoryUtil.getSqlSessionFactory();
SqlSession sqlSession = sqlSessionFactory.openSession();
IEmpMapper mapper = sqlSession.getMapper(IEmpMapper.class);
Emp emp = new Emp();
emp.setEname("呜呜");
emp.setEmpno(3);
mapper.updateEmp(emp);
sqlSession.commit();
sqlSession.close();
}
7.4 查询
编写mapper文件 注意一定要写入<mapper>标签里面
<select id="findAll" resultType="org.example.entity.Emp" >
select * from emp
</select>
test代码 findAll是方法名 需要调用
public static void main(String[] args) {
findAll();
}
public static void findAll(){
SqlSessionFactory sqlSessionFactory = SqlSessionFactoryUtil.getSqlSessionFactory();
SqlSession sqlSession = sqlSessionFactory.openSession();
IEmpMapper mapper = sqlSession.getMapper(IEmpMapper.class);
List<Emp> findAll = mapper.findAll();
}