Mybatis的开发有两种方式:
- 注解
- XML
下⾯将学习注解和XML的方式
,使用Mybatis的注解方式,主要是来完成⼀些简单的增删改查功能.如果需要实现复杂的SQL功能,建
议使用XML来配置映射语句,也就是将SQL语句写在XML配置文件中.
前言(配置环境)
开启驼峰命名(推荐)
通常数据库列使用蛇形命名法进行命名(下划线分割各个单词),而Java属性⼀般遵循驼峰命名法约定.
为了在这两种命名方式之间启用自动映射,需要将 mapUnderscoreToCamelCase 设置为true。
mybatis:
configuration:
map-underscore-to-camel-case: true #配置驼峰自动转换
驼峰命名规则:abc_xyz=>abcXyz
• 表中字段名:abc_xyz
• 类中属性名:abcXyz
Java代码不做任何处理:
@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> queryAllUser();
添加上述配置,运行代码,字段全部进行正确赋值.
打印日志
在Mybatis当中我们可以借助日志,查看到sql语句的执行、执行传递的参数以及执行结果在配置文件中进行配置即可
mybatis:
configuration: # 配置打印 MyBatis日志
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
如果是application.properties,配置内容如下:
#指定mybatis输出日志的位置, 输出控制台
mybatis.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl
重新运行程序,可以看到SQL执行内容,以及传递参数和执行结果
一. 使用注解方式
我们学习了Mybatis的查询操作,接下来我们学习MyBatis的增,删,改操作
1.1 增(Insert)
SQL语句:
insert into userinfo (username, `password`, age, gender, phone) values
("zhaoliu","zhaoliu",19,1,"18700001234")
把SQL中的常量替换为动态的参数
Mapper接口
@Insert("insert into userinfo (username, `password`, age, gender, phone)
values (#{username},#{password},#{age},#{gender},#{phone})")
Integer insert(UserInfo userInfo);
1.2 删(Delete)
SQL语句:
delete from userinfo where id=6
把SQL中的常量替换为动态的参数
Mapper接口
@Delete("delete from userinfo where id = #{id}")
void delete(Integer id);
1.3 改(Update)
SQL语句:
update userinfo set username="zhaoliu" where id=5
把SQL中的常量替换为动态的参数
Mapper接口
@Update("update userinfo set username=#{username} where id=#{id}")
void update(UserInfo userInfo);
1.4 查(Select)
我们在上⾯查询时发现,有⼏个字段是没有赋值的,只有Java对象属性和数据库字段⼀模⼀样时,才会进行赋值
接下来我们多查询⼀些数据
@Select("select id, username, `password`, age, gender, phone, delete_flag,
create_time, update_time from userinfo")
List<UserInfo> queryAllUser();
二.使用 XML 方式
如果需要实现复杂的SQL功能,建议使用XML来配置映射语句,也就是将SQL语句写在XML配置文件中.
MyBatisXML的方式需要以下两步:
- 配置数据库连接字符串和MyBatis
- 写持久层代码
配置连接字符串和MyBatis
此步骤需要进行两项设置,数据库连接字符串设置和MyBatis的XML文件配置。
如果是application.yml文件,配置内容如下:
# 数据库连接配置
spring:
datasource:
url: jdbc:mysql://127.0.0.1:3306/mybatis_test?
characterEncoding=utf8&useSSL=false
username: root
password: root
driver-class-name: com.mysql.cj.jdbc.Driver
# 配置 mybatis xml 的文件路径,在 resources/mapper 创建所有表的 xml 文件
mybatis:
mapper-locations: classpath:mapper/**Mapper.xml
如果是application.properties文件,配置内容如下:
#驱动类名称
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
#数据库连接的url
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/mybatis_test?
characterEncoding=utf8&useSSL=false
#连接数据库的用⼾名
spring.datasource.username=root
#连接数据库的密码
spring.datasource.password=root
# 配置 mybatis xml 的文件路径,在 resources/mapper 创建所有表的 xml 文件
mybatis.mapper-locations=classpath:mapper/**Mapper.xml
写持久层代码
持久层代码分两部分
- 方法定义Interface
- 方法实现:XXX.xml
2.1 增(Insert)
UserInfoMapper接口:
Integer insertUser(UserInfo userInfo);
UserInfoMapper.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.UserInfoXMlMapper">
<insert id="insertUser">
insert into userinfo (username, `password`, age, gender, phone) values (#{username}, #{password}, #{age},#{gender},#{phone})
</insert>
</mapper>
以下是对以上标签的说明:
- 标签:需要指定 namespace 属性,表示命名空间,值为mapper接口的全限定 名,包括全包名.类名。
- 查询标签:是用来执行数据库的查询操作的:
- id :是和 Interface (接口)中定义的方法名称⼀样的,表示对接口的具体实现方法。
- resultType :是返回的数据类型,也就是开头我们定义的实体类.
2.2 删(Delete)
UserInfoMapper接口:
Integer deleteUser(Integer id);
UserInfoMapper.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.UserInfoXMlMapper">
<delete id="deleteUser">
delete from userinfo where id = #{id}
</delete>
</mapper>
2.3 改(Update)
UserInfoMapper接口:
Integer updateUser(UserInfo userInfo);
UserInfoMapper.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.UserInfoXMlMapper">
<update id="updateUser">
update userinfo set username=#{username} where id=#{id}
</update>
</mapper>
2.4 查(Select)
同样的,使用XML的方式进行查询,也存在数据封装的问题我们把SQL语句进行简单修改,查询更多的字段内容
<?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.UserInfoXMlMapper">
<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>
</mapper>
运行结果: