注意:在增加配置时要严格按照指定顺序,否则可能会报错
默认事务管理器:JDBC
默认连接池:POOLED
MyBatis可以配置成适应多种环境,但每个SqlSessionFactory实例只能选择一种环境。即可以有多个id不同的环境,default就是要使用的那个环境
有三种配置properties的方法:
方法一:使用外部配置文件db.properties,然后使用${}取值
driver = com.mysql.jdbc.Driver
url = jdbc:mysql://localhost:3306/mybatis?useSSL=true&useUnicode=true&characterEncoding=UTF-8
username = root
password = 123456
<configuration>
<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="${url}"/>
<property name="username" value="${username}"/>
<property name="password" value="${password}"/>
dataSource>
environment>
environments>
<mappers>
<mapper resource="com/Nana/dao/UserMapper.xml"/>
mappers>
configuration>
方法二:直接在mybatis配置文件中配置
<configuration>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/mybatis?useSSL=true&useUnicode=true&characterEncoding=UTF-8"/>
<property name="username" value="root"/>
<property name="password" value="123456"/>
dataSource>
environment>
environments>
<mappers>
<mapper resource="com/Nana/dao/UserMapper.xml"/>
mappers>
configuration>
方法三:可以在db.properties中配置一半,在mybatis配置文件中配置一半
driver = com.mysql.jdbc.Driver
url = jdbc:mysql://localhost:3306/mybatis?useSSL=true&useUnicode=true&characterEncoding=UTF-8
<configuration>
<properties resource="db.properties">properties>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="username" value="root"/>
<property name="password" value="123456"/>
dataSource>
environment>
environments>
<mappers>
<mapper resource="com/Nana/dao/UserMapper.xml"/>
mappers>
configuration>
注意:如果外部配置文件和mybatis配置文件中有同一字段,优先使用外部配置文件的
类型别名即为Java类型设置一个端的名字,存在的意义仅在于用来减少类完全限定名的冗余
基本数据类型的别名是在前边加上_,如int的别名为__int
包装类的别名是将首字母变为小写,如Integer的别名为integer
有三种方法可以给实体类取别名:
方法一:在mybatis配置文件中编写typeAliases
<typeAliases>
<typeAlias type="com.Nana.pojo.User" alias="user">typeAlias>
typeAliases>
方法二:可以指定一个包名,在没有使用注解的时候,会扫描这个包下的所有类,以类名首字母小写作为别名
<typeAliases>
<package name="com.Nana.pojo">package>
typeAliases>
方法三:在类名前使用注解,注意要导包
import org.apache.ibatis.type.Alias;
@Alias("user")
三种方法选择:第一种可以自定义别名,第二种则不行,如果非要使用第二种还要自定义别名的话要使用注解
比较重要的设置:
每一个Mapper.xml都需要在Mybatis核心配置文件中注册,有三种注册Mapper方法:
方法一:推荐方法!
<mappers>
<mapper resource="com/Nana/dao/UserMapper.xml"/>
mappers>
方法二:使用class文件
<mappers>
<mapper class="com.Nana.dao.UserMapper"/>
mappers>
方法三:使用扫描包
<mappers>
<package name="com.Nana.dao"/>
mappers>
方法二和方法三注意点:
Mybatis运行逻辑关系:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-MFQjXlmR-1597330009594)(Mybatis学习笔记.assets/image-20200528115331373.png)]
生命周期和作用域是至关重要的,因为错误的使用会导致非常严重的并发问题
SqlSessionFactoryBuilder:
SqlSessionFactory:
SqlSession:
作用:可以理解为连接到连接池的一个请求
生命周期:SqlSession 的实例不是线程安全的,因此是不能被共享的,所以它的最佳的作用域是请求或方法作用域。用完之后需要赶紧关闭,否则会占用资源
用完之后需要赶紧关闭,
问题描述:假设数据库中的密码字段字段名为pwd,而在建立实体类的时候该字段对应的属性名为password,就有可能会导致命名有值查出来却为null的情况
解决方案一:在查询的select语句中给原来的字段起别名,过于简单粗暴
解决方案二:使用ResultMap
ResultMap特点:
<resultMap id="UserMap" type="User">
result>
resultMap>
<select id="getUserById" parameterType="int" resultMap="UserMap">
select * from mybatis.user where id=#{id}
select>