持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第2天,点击查看活动详情
配置文件说明
常见的配置属性
configuration(配置)
-
properties(属性)
-
settings(设置)
-
typeAliases(类型别名)
-
environments(环境配置)
-
environment(环境变量)
- transactionManager(事务管理器)
- dataSource(数据源)
-
-
mappers(映射器)
注意:mybatis配置文件中标签的顺序是指定的依次是:
properties(属性)->settings(设置)->typeAliases(类型别名)->environments(环境配置)->mappers(映射器)
properties(属性)
设置个jdbc.properties文件
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/Mybatis
jdbc.username=root
jdbc.password=123456
导入到配置文件mybatis-config.xml中
<!--引l入properties文件,此后就可以在当前文件中使用${ key}的方式访问value-->
<properties resource="jdbc.properties"/>
之后就可以将datasource部分进行替换
<property name="driver" value="${jdbc.driver}"/>
<property name="url" value="${jdbc.url}"/>
<property name="username" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
environments(环境配置)
<?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>
<!--引l入properties文件,此后就可以在当前文件中使用${ key}的方式访问value-->
<properties resource="jdbc.properties"/>
<!--
environments:配置链接数据库的环境
属性:default:设置默认使用环境的id
-->
<environments default="development">
<!--
environment:设置一个具体的链接数据库的环境
属性:id:设置数据库的唯一表示,不能重复
-->
<environment id="development">
<!--
transactionManager:设置事务管理器
属性:
type:设置事务管理的方式
type="JDBC /MANAGED”
JDBC:表示使用JDBC中原生的事务管理方式
MANAGED:被管理,例如Spring
-->
<transactionManager type="JDBC"/>
<!--
datasource:设置数据源
属性:
type:设置数据源的类型
type="PoOLED/ UNPOOLED | JNDI"
POOLED:表示使用数据库连接池
UNPOOLED:表示不使用数据库连接池了
JNDI :表示使用上下文中的数据源
-->
<dataSource type="POOLED">
<property name="driver" value="${jdbc.driver}"/>
<property name="url" value="${jdbc.url}"/>
<property name="username" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
</dataSource>
</environment>
<environment id="test">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/Mybatis"/>
<property name="username" value="root"/>
<property name="password" value="123456"/>
</dataSource>
</environment>
</environments>
<!--引入mybatis映射文件-->
<mappers>
<mapper resource="mappers/UserMapper.xml"/>
</mappers>
</configuration>
typeAliases(类型别名)
注:该标签根据顺序需放在properties和setting标签后
<typeAliases>
<!-- type:需要起别名的类型,alias:别名-->
<!-- <typeAlias type="com.sentiment.pojo.User" alias="xxx"></typeAlias> -->
<!--若不设置alias别名,则默认将类名当成别名,且不区分大小写-->
<!-- <typeAlias type="com.sentiment.pojo.User"></typeAlias> -->
<!-- 通过包名设置类型别名,默认将类名当成别名,且不区分大小写-->
<package name="com.sentiment.pojo"/>
</typeAliases>
mapper(映射器)
若需要同时导入多个mapper.xml配置文件时,也可以包的形式全部导入,但需要满足如下两点:
<mappers>
<!-- <mapper resource="mappers/UserMapper.xml"/> -->
<!--
以包的方式引入映射文件,但是必须满足两个条件:
1、mapper接口和映射文件所在的包必须一致
2、mapper接口的名字和映射文件的名字必须一致
-->
<package name="com.sentiment.mapper"/>
</mappers>
创建核心文件和映射文件模板
File -> Setting -> Editor -> File and Code Templates
Mybatis获取参数的两种方式
MyBatis获取参数值的两种方式:${}和#{}
${}的本质就是字符串拼接,#{}的本质就是占位符赋值
{}使用字符串拼接的方式拼接sql,若为字符串类型或日期类型的字段进行赋值时,需要手动加单引号;但是#{}使用占位符赋值的方式拼接sql,此时为字符串类型或日期类型的字段进行赋值时,可以自动添加单引号({}可以有效的避免sql注入)
单个字面量类型的参数
若mapper接口中的方法参数为单个的字面量类型
此时可以使用{}和#{}以任意的名称获取参数的值,注意{}需要手动加单引号
接口
User getUsername(String username);
mapper配置文件
<select id="getUsername" resultType="User">
<!-- select * from t_user where username=#{username} -->
select * from t_user where username='${username}'
</select>
实现
public void GetUsername(){
SqlSession sqlSession = SqlSeesionUtils.getSqlSession();
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
User user=mapper.getUsername("Sentiment");
System.out.println(user);
}
多个字面量类型的参数
若mapper接口方法的参数为多个的字面量类型
此时Mybatis会将参数放在map集合中,以两种方式存储(也可arg,param混合使用):
- 以arg0,arg1.....为键,以参数为值
- 以param1,param2....为键,以参数为值
接口
User checklogin(String username ,String password);
配置文件
<select id="checklogin" resultType="User">
<!--select * from t_user where username=#{arg0} and password=#{arg1}-->
select * from t_user where username='${param1}' and password='${param2}'
</select>
通过Map自定义参数
若mapper接口中的方法需要多个参数时,此时可以手动创建map集合,讲这些数据放在map中,并通过${}或#{}访问map集合的键就可以获取对应的值
接口
User checkLoginByMap(Map<String,Object> map);
配置文件
<select id="checkLoginByMap" resultType="User">
<!-- select * from t_user where username=#{username} and password=#{password};-->
select * from t_user where username='${username}' and password='${password}'
</select>
实现
public void CheckLoginByMap(){
SqlSession sqlSession = SqlSeesionUtils.getSqlSession();
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
HashMap<String, Object> map = new HashMap<>();
map.put("username","Sentiment");
map.put("password",123456);
User user=mapper.checkLoginByMap(map);
System.out.println(user);
}
实体型类型的参数
需要通过#{}和${}访问实体类中的属性就可以获取相对应的属性值
接口
int insertUser(User user);
配置文件
<insert id="insertUser">
insert into t_user values(#{id},#{username},#{password},#{age},#{gender},#{email})
</insert>
实现
public void insertUser(){
SqlSession sqlSession = SqlSeesionUtils.getSqlSession();
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
User user=new User(4,"xxx","123456",20,"男","123456@qq.com");
mapper.insertUser(user);
}
@Param注解
通过接口定义@Param,此时mybatis会将注解中的参数放在map中进行存储,有两种存储方式:
- 以@Param注解中的value属性值为键,以参数为值
- 以param1,param2....为键,以参数为值
接口
User checkLoginByParam(@Param("username") String username,@Param("password") String password);
配置文件
<select id="checkLoginByParam" resultType="User">
<!-- select * from t_user where username=#{param1} and password=#{param2} -->
select * from t_user where username=#{username} and password=#{password}
</select>
实现
public void checkLoginByParam(){
SqlSession sqlSession = SqlSeesionUtils.getSqlSession();
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
User user=mapper.checkLoginByParam("Sentiment","123456");
System.out.println(user);
}
}