目录
一.什么是MyBatis?
二.使用MyBatis的准备工作
1.引入依赖:
2.配置数据库连接字符串(建立MaBatis和MySQL的连接)
3.在model包中建立数据库对应的实体类UserInfo
三.通过@注解的方式实现MyBatis的开发
1.插入语句(Insert)
2.删除语句(Delete)
3.更新语句(Update)
4.查询语句(Select)
1.起别名:
2.结果映射:
3.开启驼峰命名:
四.通过xml的方式实现MyBatis的开发
1.前提准备:
1)添加关于xml的配置(yml)
2)在resources文件夹中添加xml文件,在文件写入固定格式
3)接着就可以在里写数据库语句了
2.插入语句(Insert)
3.删除语句(Delete)
4.更新语句(Update)
5.查询语句(Select)
一.什么是MyBatis?
MyBatis是一个开源的持久层框架,它提供了一种优雅的方式来管理数据库访问代码。MyBatis通过将SQL语句映射到Java方法,使得在Java应用程序中执行数据库操作变得更加简单和直观。
MyBatis的核心思想是将SQL语句与Java方法和参数进行绑定,这样可以避免传统的JDBC编程中的大量样板代码。开发人员可以使用XML或注解来定义SQL映射,将SQL语句保存在外部文件中,并将其与Java接口或类进行绑定。
二.使用MyBatis的准备工作
1.引入依赖:
<dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>2.3.1</version></dependency><dependency><groupId>com.mysql</groupId><artifactId>mysql-connector-j</artifactId><scope>runtime</scope></dependency>
2.配置数据库连接字符串(建立MaBatis和MySQL的连接)
spring:datasource:url: jdbc:mysql://127.0.0.1:3306/mybatis_test?characterEncoding=utf8&useSSL=falseusername: rootpassword: rootdriver-class-name: com.mysql.cj.jdbc.Driver
mybatis:configuration: # 配置打印 MyBatis⽇志map-underscore-to-camel-case: true #配置驼峰⾃动转换log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
3.在model包中建立数据库对应的实体类UserInfo
public class UserInfo {private Integer id;private String username;private String password;private Integer age;private Integer gender;private String phone;private Integer deleteFlag;private Date createTime;private Date updateTime;
}
前提工作做完后,就可以实现数据库操作了
三.通过@注解的方式实现MyBatis的开发
1.插入语句(Insert)
使用@Insert("")注解,并在("")中实现插入语句
示例:
@Insert("insert into userinfo (username, password, age, gender, phone) " +"values (#{userInfo.username},#{userInfo.password},#{userInfo.age}," +"#{userInfo.gender},#{userInfo.phone})")Integer insertUserInfo(UserInfo userInfo);//在上述代码中实现了插入一个userInfo对象的信息到数据库中userinfo的表中
//userInfo的属性不能直接写到sql语句中,而是通过#{userInfo.属性字段}来自动查找userInfo的属性并填入sql语句中
同时可以搭配@Param注解使用,为方法中的参数指定名称
@Insert("insert into userinfo (username, password, age, gender, phone) " +"values (#{user.username}, #{user.password}, #{user.age}," +"#{user.gender}, #{user.phone})")Integer insertUserInfo2(@Param("user") UserInfo userInfo);//将userInfo识别成user使用
当传入参数有多个时,会按顺序填入各属性,而使用@Param就可以更自由的使用参数,同时可以提高代码的清晰度和可读性
Insert 语句默认返回的是受影响的行数,如果想要拿到⾃增id, 需要在方法上添加⼀个@Options注解
@Options(useGeneratedKeys = true, keyProperty = "id")@Insert("insert into userinfo (username, password, age, gender, phone) " +"values (#{user.username}, #{user.password}, #{user.age}," +"#{user.gender}, #{user.phone})")Integer insertUserInfo2(@Param("user") UserInfo userInfo);
-
useGeneratedKeys = true
:表示告诉 MyBatis 在执行插入操作后要生成主键。当这个参数设置为 true 时,MyBatis 会通知数据库生成主键,并将生成的主键值返回给应用程序。 -
keyProperty = "id"
:表示指定将生成的主键值设置到对象的哪个属性上。在这里,keyProperty
指定了要将生成的主键值设置到对象的id
属性上。
示例:
UserInfo newUser = new UserInfo();
newUser.setUsername("testUser");
newUser.setPassword("123456");
newUser.setAge(25);
newUser.setGender("male");
newUser.setPhone("123456789");Integer result = insertUserInfo2(newUser);System.out.println("插入成功,生成的主键值为:" + newUser.getId());//返回的主键值自动设置到newUser的id属性上了
//⽅法返回值result依然是受影响的⾏数
2.删除语句(Delete)
使用@Delete("")注解,并在("")中实现删除语句
示例:
@Delete("delete from userinfo where id = #{id}")void delete(Integer id);//通过id删除某个用户
同样可以使用@Param注解
3.更新语句(Update)
使用@Update("")注解,并在("")中实现更新语句
示例:
@Update("update userinfo set username=#{username} where id=#{id}")void update(UserInfo userInfo);//通过id更新用户的姓名
4.查询语句(Select)
使用@Select("")注解,并在("")中实现查询语句
示例:
@Select("select id, username, password, age, gender, phone, delete_flag, " +"create_time, update_time from userinfo")List<UserInfo> queryAllUser();
MyBatis会自动将查询出的表的数据按照字段名依次放入List<UserInfo> 对象中
但是,如果表的字段名和类的属性不一致时,就无法正常赋值了,例如表中的create_time字段和类的createTime属性
解决办法:
1.起别名:
@Select("select id, username, `password`, age, gender, phone, delete_flag " +"as deleteFlag, create_time as createTime, update_time as updateTime " +"from userinfo")public List<UserInfo> queryAllUser2();//查询语句中 as 加上想改成的名字
2.结果映射:
@Select("select id, username, `password`, age, gender, phone, delete_flag,
create_time, update_time from userinfo")
@Results({@Result(column = "delete_flag",property = "deleteFlag"),@Result(column = "create_time",property = "createTime"),@Result(column = "update_time",property = "updateTime")
})
List<UserInfo> queryAllUser();
3.开启驼峰命名:
在yml配置中加上:
mybatis:configuration:map-underscore-to-camel-case: true #配置驼峰⾃动转换
到此关于注解实现MyBatis的方式就结束了~
四.通过xml的方式实现MyBatis的开发
1.前提准备:
1)添加关于xml的配置(yml)
mybatis:mapper-locations: classpath:mapper/**Mapper.xml
2)在resources文件夹中添加xml文件,在文件写入固定格式
<?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">
<mapper namespace="com.example.demo.mapper.UserInfoMapper">//写MySQL语句
</mapper>
3)接着就可以在<mapper></mapper>里写数据库语句了
2.插入语句(Insert)
使用<insert>标签实现插入语句
<mapper namespace="com.example.demo.mapper.UserInfoMapper"><insert id="insertUser">insert into userinfo (username, password, age, gender, phone) values (#{username}, #{password}, #{age},#{gender},#{phone})</insert></mapper>
sql语句基本没有变化,只是放入了<insert>标签以及用id指定了mapper中要实现的接口的方法名
如果要返回自增 id,则需要设置useGeneratedKeys 和keyProperty属性
<insert id="insertUser" useGeneratedKeys="true" keyProperty="id">insert into userinfo (username, `password`, age, gender, phone) values(#{userinfo.username},#{userinfo.password},#{userinfo.age},#
{userinfo.gender},#{userinfo.phone})
</insert>
3.删除语句(Delete)
使用<delete>标签实现删除语句
<delete id="deleteUser">delete from userinfo where id = #{id}
</delete>
4.更新语句(Update)
使用<update>标签实现更新语句
<update id="updateUser">update userinfo set username=#{username} where id=#{id}
</update>
5.查询语句(Select)
使用<select>标签实现查询语句
<select id="queryAllUser" resultType="com.example.demo.model.UserInfo">select id, username,`password`, age, gender, phone, delete_flag,create_time, update_time from userinfo
</select>
同理,如果表的字段名和类的属性不一致时,就无法正常赋值了,解决方法和用注解的方式类似
到这里,有关MyBatis的基础操作的介绍就全部讲完了