本文是大二时期所写,在我的博客上发布,现在在语雀上再次整理一下,我的博客地址:mybatis实现增删改查
1.jdbc简单介绍:
java数据库连接池(java Database Connectivity,简称JDBC)是java语言用来规范客户端程序如何来访问数据库的应用程序接口,提供了诸如查询和更新数据库中数据的方法
2.mybatis的概述:
mybatis是一个持久层框架,用java编写的。它封装jdbc操作的很多细节,使开发者只关注sql语气本身,而无需关注注册驱动,创建连接等繁杂过程,它使用了ORM思想实现了结果集的封装。
ORM:Object Relationl Mappging对象关系映射
简单的说:就是把数据库和实体类及实体类的属性对应起来,让我们可以操作实体类就实现操作数据库表。
mybatis的环境搭建
- 第一步:创建maven工程并导入坐标
- 第二步:创建实体类(User.java)和对应的(UserMapper.java)接口
- 第三步:创建Mybatis的主配置文件(SqlMapConifg.xml)
- 第四步:创建映射配置文件(UserMapper.xml)
- 第五步:创建测试类(TestMybatis.java)
环境搭建的注意事项
- 第一个:mybatis的映射配置文件位置必须和mapper接口的包结构相同
- 第二个:映射配置文件的mapper标签namespace属性的取值必须是mapper接口的权限定类名
- 第三个:映射配置文件的操作配置(select),id属性的取值必须是mapper接口的全限定类名。
3.mybatis的入门案例
第一步:读取配置文件
第二步:创建SqlSessionFactory工厂
第三步:创建SqlSession
第四步:创建Dao接口的代理对象
第五步:执行dao中的方法
第六步:释放资源
注意事项:
不要忘记在映射配置中告知mybatis要封装到哪个实体类中配置的方法;指定实体类的权限定类名。
代码实现
3.1创建user数据表
#创建数据库mybatis_db
CREATE DATABASE `mybatis_db`;
USE `mybatis_db`;
#创建user表
CREATE TABLE `user` (
`id` int(11) NOT NULL auto_increment,
`username` varchar(32) NOT NULL COMMENT '用户名称',
`birthday` datetime default NULL COMMENT '生日',
`sex` char(1) default NULL COMMENT '性别',
`address` varchar(256) default NULL COMMENT '地址',
PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
#插入数据
insert into `user`(`id`,`username`,`birthday`,`sex`,`address`)
values (1,'子 慕','2020-11-11 00:00:00','男','北京海淀'),(2,'应颠','2020-12-12
00:00:00','男','北 京海淀');
3.2导入MyBatis的坐标和其他相关坐标
在https://mvnrepository.com/ 找对应坐标,加入自己需要的配置文件
我加入的是如下内容:
<dependencies>
<!--mysql驱动坐标-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.16</version>
</dependency>
<!--mybatis坐标-->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.4.6</version>
</dependency>
<!--单元测试坐标-->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>RELEASE</version>
<scope>test</scope>
</dependency>
</dependencies>
注意:刚加入maven的配置坐标时,会发现里面名称什么是红色的,是因为我们项目中还没有加载这些配置文件,此时我们只要刷新右边的maven,就会自动加载这些配置,就不会红了。
3.3 编写User实体
package com.baizhi.bill.entity;
import java.util.Date;
//编写user实体
public class User {
private int id;
private String username;
private String birthday;
private char sex;
private String address;
private Date date;
@Override
public String toString() {
return "User{" +
"id=" + id +
", username='" + username + '\'' +
", birthday=" + birthday +
", sex=" + sex +
", address='" + address + '\'' +
'}';
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getBirthday() {
return birthday;
}
public void setBirthday(String birthday) {
this.birthday = birthday;
}
public char getSex() {
return sex;
}
public void setSex(char sex) {
this.sex = sex;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
public void setBirthday(Date date) {
this.date=date;
}
}
3.4 编写UserMapper接口
package com.baizhi.bill.mapper;
import com.baizhi.bill.entity.User;
import java.util.List;
//用户的持久层接口
public interface UserMapper {
//查询所有操作
List<User> findAll();
void save(User user);
void update(User user);
void delete(int i);
}
3.5编写UserMapper映射文件
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!--namespace=绑定一个对应Mapper接口-->
<mapper namespace="com.baizhi.bill.mapper.UserMapper">
<!--查找-->
<!--id对应方法名字-->
<select id="findAll" resultType="com.baizhi.bill.entity.User">
select * from user
</select>
<!--加入-->
<!--对象中的属性,可以直接取出来-->
<insert id="save" parameterType="com.baizhi.bill.entity.User">
insert into user(username,birthday,sex,address)
values(#{username},#{birthday},#{sex},#{address})
</insert>
<!--修改-->
<update id="update" parameterType="com.baizhi.bill.entity.User">
update user set username = #{username},birthday = #{birthday},
sex = #{sex},address = #{address} where id = #{id}
</update>
<!--删除-->
<delete id="delete" parameterType="com.baizhi.bill.entity.User">
delete from user where id = #{id}
</delete>
3.6编写MyBatis核心文件
<?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>
<!--环境配置-->
<environments default="mysql">
<environment id="mysql">
<transactionManager type="JDBC"></transactionManager>
<dataSource type="POOLED">
<property name="driver" value="com.mysql.cj.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/lmj?serverTimezone=Asia/Shanghai"/>
<property name="username" value="root"></property>
<property name="password" value="1234"></property>
</dataSource>
</environment>
</environments>
<!--每一个Mapper.xml都需要在Mybatis配置文件中注册-->
<mappers>
<mapper resource="UserMapper.xml"></mapper>
</mappers>
</configuration>
说明:
元素的定义,这里描述的是数据库。它里面的元素是配置事务管理器,这里采用的是Mybatis的JDBC管理器方式。然后采用元素配置数据库,其中属性type=“POOLED”代表采用Mybatis内部提供的连接池方式,最后定义一些关于JDBC的属性信息。
元素代表引用的那些映射器。
3.7编写测试类
import com.baizhi.bill.entity.User;
import com.baizhi.bill.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.IOException;
import java.io.InputStream;
import java.util.List;
public class TestMybatis {
@Test
public void test(){
try {
InputStream is = Resources.getResourceAsStream("mybatisConfig.xml");
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(is);
SqlSession sqlSession = sqlSessionFactory.openSession();
UserMapper um=sqlSession.getMapper(UserMapper.class);
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
List<User> all=mapper.findAll();
for (User user:all){
System.out.println(user);
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
3.7 知识小结
- 创建mybatis_db数据库和user表
- 创建项目,导入依赖 (pom中导入我们需要的maven坐标)
- 创建User实体类 (User.java)对应的(UserMapper.java)接口
- 编写映射文件(UserMapper.xml )
- 编写核心文件(mybatisConfig.xml)
- 编写测试类 (TestMybatis.java)
4.Mybatis增删改查
4.1新增
1)编写映射文件UserMapper.xml
<!--新增-->
<insert id="save" parameterType="com.baizhi.bill.entity.User">
insert into user(username,birthday,sex,address)
values(#{username},#{birthday},#{sex},#{address})
</insert>
2)编写测试类
import com.baizhi.bill.entity.User;
import com.baizhi.bill.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.IOException;
import java.io.InputStream;
import java.util.Date;
public class Testinsert {
@Test
public void test() throws IOException {
InputStream is = Resources.getResourceAsStream("mybatisConfige.xml");
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(is);
SqlSession sqlSession = sqlSessionFactory.openSession();
User user = new User();
user.setUsername("jack");
user.setBirthday(new Date());
user.setSex('男');
user.setAddress("上海");
user.setBirthday("2020-03-24");
UserMapper um = sqlSession.getMapper(UserMapper.class);
um.save(user);
sqlSession.commit();
sqlSession.close();
}
}
3)新增注意事项
插入语句使用insert标签
在映射文件中使用parameterType属性指定要插入的数据类型
Sql语句中使用#{实体属性名}方式引用实体中的属性值
插入操作使用的API是sqlSession.insert(“命名空间.id”,实体对象);
插入操作涉及数据库数据变化,所以要使用sqlSession对象显示的提交事务,即sqlSession.commit()
(注意:增删改一定不要忘记提交事务)
4.2 修改
1)编写映射文件UserMapper.xml
<!--修改-->
<update id="update" parameterType="com.baizhi.bill.entity.User">
update user set username = #{username},birthday = #{birthday},
sex = #{sex},address = #{address} where id = #{id}
</update>
2)编写测试类
import com.baizhi.bill.entity.User;
import com.baizhi.bill.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.Date;
public class Testupdata {
@Test
public void testUpdate() throws Exception {
// 加载核心配置文件
InputStream is = Resources.getResourceAsStream("mybatisConfige.xml");
// 获取SqlSessionFactory工厂对象
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(is);
// 获取SqlSession会话对象 SqlSession
SqlSession sqlSession = sqlSessionFactory.openSession();
// 执行sql
User user = new User();
user.setId(4);
user.setUsername("lucy");
user.setBirthday(new Date());
user.setSex('女');
user.setAddress("北京朝阳");
UserMapper um = sqlSession.getMapper(UserMapper.class);
um.update(user);
// 增删改需要提交事务
// DML语句,手动提交事务
sqlSession.commit();
// 释放资源
sqlSession.close();
}
}
3)修改注意事项
修改语句使用update标签
修改操作使用的API是sqlSession.update(“命名空间.id”,实体对象);
4.3 删除
1)编写映射文件UserMapper.xml
<!--删除-->
<delete id="delete" parameterType="com.baizhi.bill.entity.User">
delete from user where id = #{id}
</delete>
2)编写测试类
import com.baizhi.bill.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;
public class Testdelete {
@Test
public void testDelete() throws Exception {
// 加载核心配置文件
InputStream is = Resources.getResourceAsStream("mybatisConfige.xml");
// 获取SqlSessionFactory工厂对象
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(is);
// 获取SqlSession会话对象
SqlSession sqlSession = sqlSessionFactory.openSession();
// 执行sql
UserMapper um = sqlSession.getMapper(UserMapper.class);
um.delete(1);
// DML语句,手动提交事务
sqlSession.commit();
// 释放资源
sqlSession.close();
}
}
3)删除注意事项
删除语句使用delete标签
Sql语句中使用#{任意字符串}方式引用传递的单个参数
删除操作使用的API是sqlSession.delete(“命名空间.id”,实体对象);
4.4知识小结

