1.mybatis概述
原是Apache的一个开源项目iBatis, 2010年6月这个项目由Apache Software Foundation 迁移到了 Google Code,随着开发团队转投Google Code 旗下, iBatis3.x正式更名为MyBatis。
MyBatis 是一款优秀的持久层框架。
框架就是对技术的封装,让程序员可以快速使用,提高开发效率。
Java后端框架:
Mybatis:对jdbc进行封装,
Spring:对整个后端架构进行管理,
Springweb:对web层(servlet)进行封装
Springboot:对spring框架进行搭建
Linxu操作系统:mysql redis docker 开发好的项目部署到linux环境
Mybatis是一个优秀的数据持久层,(dao层 数据访问层 数据持久层)
Mybatis是对jdbc进行的封装,避免了jdbc中,手动设置参数,手动印射结果,可以使用 XML 或注解来配置和映射,将数据库中的记录映射成Java 的 POJO(Plain Old Java Objects,普通的 Java 对象,就是后台管理系统管理里面的model,将数据库后面返回的数据进行封装通过servlet传递到前端),是一种 ORM(ORM Object Relational Mapping 对象关系映射)实现.
Mybatis还提供了动态sql和数据缓存功能。
mybatis搭建
- 创建一个maven项目
- 导入mybatis jar包
- 创建一个全局的mybatis配置文件,配置数据库连接等
- 创建一个访问接口,定义方法
- 创建接口对应的印射文件,编写sql
1.idea2023版的可以直接创建一个普通的java项目会自动默认选择maven。
2.打开这个文件导入依赖
3.对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>
<!--mybatis配置文件全局配置-->
<settings>
<setting name="logImpl" value="STDOUT_LOGGING"/><!--打印日志,控制台输出信息-->
<!-- 是否开启驼峰命名自动映射,即从经典数据库列名 A_COLUMN 映射到经典 Java 属性名 aColumn。-->
<setting name="mapUnderscoreToCamelCase" value="true"/>
</settings>
<!-- 为类配置别名-->
<typeAliases>
<!-- <typeAlias type="com.ffyc.mybatisdemo.model.admin" alias="Admin"></typeAlias><!– 一次配置一个–>-->
<package name="com.ffyc.mybatisdemo.model"/><!-- 一次配置一个包下面的-->
</typeAliases>
<!--配置数据库连接-->
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<!-- type="POOLED"数据库连接池 默认创建了十个连接对象,减少频繁创建销毁对象 -->
<dataSource type="POOLED">
<!-- 数据库连接配置-->
<property name="driver" value="com.mysql.cj.jdbc.Driver" />
<property name="url" value="jdbc:mysql://127.0.0.1:3306/dormdb?serverTimezone=Asia/Shanghai" />
<property name="username" value="root" />
<property name="password" value="123456"/>
</dataSource>
</environment>
</environments>
<!-- 注册印射文件 -->
<mappers>
<mapper resource="mappers/adminmapper.xml"></mapper>
</mappers>
</configuration>
4.创建接口定义方法,创建一个sql印射文件,
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.ffyc.mybatisdemo.dao.adminDao">
<!--接口地址-->
<!--sql映射文件-->
<!--主要写sql实现 -->
<insert id="insert" parameterType="com.ffyc.mybatisdemo.model.admin"
useGeneratedKeys="true" keyProperty="id" keyColumn="id">
-- useGeneratedKeys="true" 返回自增主键
-- keyProperty="id" 定义接收属性
-- keyColumn="id" 定义主键列
insert into admin(account,password) values (#{account},#{password})
</insert>
<delete id="delete" parameterType="int">
delete from admin where id=#{id}
</delete>
<select id="findAdminByid"
parameterType="int"
resultType="admin">
<!--id接口方法 parameterType参数类型 resultType返回对象-->
select * from admin where id = #{id}
</select>
<select id="findAdminByaccount" parameterType="string" resultType="admin">
select * from admin where account=#{account}
</select>
<select id="findAdminByidaccount" resultType="admin">
select * from admin where id=#{id} and account=#{acc}
</select>
<select id="findAdmin" parameterType="admin" resultType="admin">
select * from admin where id=#{id} and account=#{account}
</select>
<select id="findadmins" resultType="admin">
select * from admin
</select>
</mapper>
接口中定义的方法1都要在sql印射文件中实现,安装一个插件,就是接口方法前面的小鸟,点击就可以跳转到印射文件中对应的印射sql,并且在未安装插件时书写不会报错提示。
搭建完成后基本上就是对4 5步操作就行了
接口与印射文件对应的关系
mybatis全局配置要按照顺序进行配置
参数传递
1.单个参数传递
方法
void delete(int id);
对应sql印射文件, parameterType="int传入参数类型为int
<delete id="delete" parameterType="int">
delete from admin where id=#{id}
</delete>
多个参数传递
方法
admin findAdminByidaccount(@Param("id") int id,@Param("acc") String account);
对应sql印射文件, resultType="admin"返回值类型
<select id="findAdminByidaccount" resultType="admin">
select * from admin where id=#{id} and account=#{acc}
</select>
对象参数
方法
admin findAdmin(admin a);
对应sql印射文件,此时#{}里面的id与account都应该时在admin中定义的属性。
<select id="findAdmin" parameterType="admin" resultType="admin">
select * from admin where id=#{id} and account=#{account}
</select>
本来返回对象为admin应该写全名,
com.ffyc.mybatisdemo.model.admin
因为在全局配置中进行了设置,所以可以直接写admin,配置如下,需要注意的是mybatis配置必须要按顺序。
<!-- 为类配置别名-->
<typeAliases>
<!-- <typeAlias type="com.ffyc.mybatisdemo.model.admin" alias="Admin"></typeAlias><!– 一次配置一个–>-->
<package name="com.ffyc.mybatisdemo.model"/><!-- 一次配置一个包下面的-->
</typeAliases>
配置完别名后返还对象就可以这样写
增删改查事务管理
数据库事务:数据库一种管理机制,是对一次连接数据库过程的管理,保证一次操作中,执行的多条sql,要么都执行,要么都不执行,例如转账
- 先从a减钱 sql1
- 再从b加钱 sql2
查询,查询操作通常不需要事务管理
//1.读取配置文件
Reader resourceAsReader = Resources.getResourceAsReader("mybatis.xml");
//2.创建SqlSessionFactory对象,负责创建sqlsession对象(连接数据库的会话对象类似于connection)
//SqlSessionFactory也只需要创建一次创建后不需要销毁
SqlSessionFactory build = new SqlSessionFactoryBuilder().build(resourceAsReader);
//3.创建sqlsession对象
SqlSession sqlSession = build.openSession();
//创建接口代理对象
adminDao mapper = sqlSession.getMapper(adminDao.class);
admin adminByid = mapper.findAdminByid(1);
System.out.println(adminByid);
//关闭与数据库连接
sqlSession.close();
增加,将一些固定步骤封装在jdbcUtil的静态方法中,使用的时候直接调用,
通过commit()(一定不可以写在finally中)提交事务,前面程序都没有问题执行这一步。上面的因为没有提交事务所以没有加入数据成功。增删改必须提交事务,查数据不需要提交事务。
印射文件
<insert id="insert" parameterType="com.ffyc.mybatisdemo.model.admin"
useGeneratedKeys="true" keyProperty="id" keyColumn="id">
-- useGeneratedKeys="true" 返回自增主键
-- keyProperty="id" 定义接收属性
-- keyColumn="id" 定义主键列
insert into admin(account,password) values (#{account},#{password})
</insert>
Mybatis返回值印射
例如数据库中的admin表的admin_gender列,开启这个设置后就可以印射到java对象中的admin的adminGender列中。
List<admin> findadmins();当方法返回值是一个集合时,
<select id="findadmins" resultType="admin">
select * from admin
</select>
在sql印射文件,返回值类型还是admin,mybatis会自动将admin封装到List集合中去。