MyBatis-【第一天】
文章目录
1.环境:
JDK,MySql,maven,IDEA
2.简介
2.1什么是mybatis
- MyBatis 是一款优秀的持久层框架,
- 它支持自定义 SQL、存储过程以及高级映射。
- MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。
- MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型、接口和 Java POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录。
如何获得mybatis:
github
maven :
<!-- https://mvnrepository.com/artifact/org.mybatis/mybatis -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.3</version>
</dependency>
2.2持久化
数据持久化
- 数据持久化
- 持久化就是将程序的数据在持久状态和瞬时状态转化的过程
- 内存:断电即失
- 数据库,io文件持久化
2.3持久层
-
完成持久化工作的代码块
-
层的界限非常明显
2.4为什么需要
- 方便
- 简化JDBC代码,框架实现,自动化
- 帮助程序员将数据存入数据库中
- 将sql和代码分离,提高可维护性
- 提供映射标签,支持对象与数据库的orm字段的关系映射
- 提供对象关系映射标签,支持对象关系组建维护
- 提供xml标签,支持编写动态sql
3.第一个mybatis程序
思路:搭建环境–>导入mybatis–>编写程序
1.搭建环境
<?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="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="com.mysql.cj.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/smbms?serverTimezone=GMT%2B8&useUnicode=true&characterEncoding=utf8&useSSL=true"/>
<property name="username" value="root"/>
<property name="password" value="123456"/>
</dataSource>
</environment>
</environments>
</configuration>
2.编写mybatis工具类
dao层:
<?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绑定dao层相应的抽象类,id绑定方法-->
<mapper namespace="com.fish.dao.UserDao">
<select id="getUserList" resultType="com.fish.pojo.User">
select * from smbms.smbms_user
</select>
</mapper>
pojo层
3.测试
代码:
@Test
public void test(){
SqlSession sqlSession = MybatisUtil.getSqlSession();
UserDao mapper = sqlSession.getMapper(UserDao.class);
List<User> userList = mapper.getUserList();
for (User user:userList){
System.out.println(user);
}
}
-
1.出现错误
-
mapper未注册:
-
<mappers> <mapper resource="com/fish/dao/UserMapper.xml"></mapper> </mappers>
-
- mapperRegistry异常—>pom.xml文件中添加过滤
-
<!-- 解决xml文件无法被导出的问题--> <resources> <resource> <directory>src/main/resources</directory> <includes> <include>**/*.properties</include> <include>**/*.xml</include> </includes> <filtering>true</filtering> </resource> <resource> <directory>src/main/java</directory> <includes> <include>**/*.properties</include> <include>**/*.xml</include> </includes> <filtering>true</filtering> </resource> </resources>
4.作用域(Scope)和生命周期
SqlSessionFactoryBuilder
这个类可以被实例化、使用和丢弃,一旦创建了 SqlSessionFactory,就不再需要它了
SqlSessionFactory
SqlSessionFactory 一旦被创建就应该在应用的运行期间一直存在,没有任何理由丢弃它或重新创建另一个实例
SqlSession
每个线程都应该有它自己的 SqlSession 实例。SqlSession 的实例不是线程安全的,因此是不能被共享的,所以它的最佳的作用域是请求或方法作用域。
每次打开sqlSession后都要记得关闭
5.万能map和模糊查询
-
map传递参数,直接在sql中取出key即可
-
对象传递参数时,直接在sql中取出对象的属性即可
-
只有一个基本类型参数的情况下,可以直接在sql中取到
-
多个参数使用map或者注解
模糊查询
<select id="getUserByName" parameterType="String" resultType="com.fish.pojo.User">
select * from smbms.smbms_user where userName like "%"#{name}"%"
</select>
6.配置解析
6.1环境配置
-
MyBatis 可以配置成适应多种环境
-
尽管可以配置多个环境,但每个 SqlSessionFactory 实例只能选择一种环境
-
每个数据库对应一个 SqlSessionFactory 实例
6.1.1事务管理器(transactionManager)
-
JDBC – 这个配置直接使用了 JDBC 的提交和回滚设施,它依赖从数据源获得的连接来管理事务作用域。
-
MANAGED – 这个配置几乎没做什么
6.1.2数据源(dataSource)
- UNPOOLED:没有池化技术
- POOLED:有池化技术
- JNDI:为了能在如 EJB 或应用服务器这类容器中使用
6.2属性(properties)
可以通过properties属性来实现引用配置文件
<properties resource="db.properties"></properties>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="${driver}"/>
<property name="url" value="${jdbc.url}"/>
<property name="username" value="${username}"/>
<property name="password" value="${password}"/>
</dataSource>
</environment>
</environments>
driver=com.mysql.cj.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/smbms?serverTimezone=GMT%2B8&useUnicode=true&characterEncoding=utf8&useSSL=true
username=root
password=123456
注意:idea中properties属性文件中url命名已经被使用,需要改变名字才能正常连接数据库
6.3类型别名
作用:类型别名可为 Java 类型设置一个缩写名字。 它仅用于 XML 配置,意在降低冗余的全限定类名书写
实体类少的时候可以使用:
<typeAliases>
<typeAlias type="com.fish.pojo.User" alias="user"></typeAlias>
</typeAliases>
实体类非常多时可以使用:
<typeAliases>
<package name="com.fish.pojo"/>
</typeAliases>
在使用这种方法时,默认pojo类的首字母小写当作别名,若在pojo类上添加注解,则使用注解别名
@Alias("userAlias")
public class User {}
默认基本类型的别名映射
别名 | 映射的类型 |
---|---|
_byte | byte |
_long | long |
_short | short |
_int | int |
_integer | int |
_double | double |
_float | float |
_boolean | boolean |