文章目录
配置Mybatis核心文件-mybatis-config.xml
一、MyBatis 介绍
MyBatis 是一款优秀的持久层框架,它支持自定义 SQL、存储过程以及高级映射。MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型、接口和 Java POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录。
持久化和ORM
【1】持久化就是程序的数据,在瞬时状态(new)和持久状态(数据库等)之间的转化。通过数据库操作进行转化。
【2】ORM.(O=javaBean)(R=关系型数据库)(M=映射)。
编写程序的时候,以面向对象的方式处理数据。
保存数据的时候,却以关系型数据库的方式存储
注意:ORM这三方面要保持一致。任意部分的变动都要一起检测。
Mybatis的概念和优缺点
优点:
【1】Mybatis是一个“半成品”的“ORM”框架。作用于DAO层。
【2】和hibernate相比,他是一个轻量级的选手。有着灵活的SQL的操作。
【3】小巧简单易学。
【4】和JDBC相比,他实现了SQL和代码的分离。可重用。
缺点:
【1】SQL编写的量大。需要对sql语句熟悉。
【2】数据库的移植性较差。
二、MyBatis 环境搭建
要使用 MyBatis, 只需将 mybatis-x.x.x.jar 文件置于类路径(classpath)中即可。
如果使用 idea中Maven 来构建项目,则需将下面的依赖代码置于 pom.xml 文件中:
<dependencies>
<!--log4j核心依赖-->
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
<!-- mysql 数据库驱动 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.29</version>
</dependency>
<!-- mybatis依赖 -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.6</version>
</dependency>
<!-- junit -->
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-engine</artifactId>
<version>5.5.2</version>
<scope>test</scope>
</dependency>
</dependencies>
配置Mybatis核心文件-mybatis-config.xml
<configuration>
<!-- 引入 jdbc.properties 文件 -->
<properties resource="jdbc.properties"/>
<!-- 配置mybatis的log实现为LOG4J -->
<settings>
<setting name="logImpl" value="LOG4J"/>
</settings>
<environments default="development">
<environment id="development">
<!-- 配置事务管理,采用JDBC的事务管理 -->
<transactionManager type="JDBC"/>
<!-- POOLED:mybatis自带的数据源,JNDI:基于tomcat的数据源 -->
<dataSource type="POOLED">
<property name="driver" value="${driver}"/>
<property name="url" value="${url}"/>
<property name="username" value="${user}"/>
<property name="password" value="${password}"/>
</dataSource>
</environment>
</environments>
<!-- 将mapper文件加入到配置文件中 -->
<mappers>
<mapper resource="com/xinxi2/dao/TSysUserMapper.xml"/>
</mappers>
</configuration>
三、入门测试程序
1.创建 Bean 实体
package com.xinxi2.bean;
import java.util.Date;
public class TSysUser {
private Integer id ;
private String acccunt ;
private String realname ;
private String password ;
private Integer sex ;
private Date birthday ;
private String phone ;
private String address ;
private Integer roleid ;
private Integer createduserid ;
private Date createdtime ;
private Integer updateduserid ;
private Date updatedtime ;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getAcccunt() {
return acccunt;
}
public void setAcccunt(String acccunt) {
this.acccunt = acccunt;
}
public String getRealname() {
return realname;
}
public void setRealname(String realname) {
this.realname = realname;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public Integer getSex() {
return sex;
}
public void setSex(Integer sex) {
this.sex = sex;
}
public Date getBirthday() {
return birthday;
}
public void setBirthday(Date birthday) {
this.birthday = birthday;
}
public String getPhone() {
return phone;
}
public void setPhone(String phone) {
this.phone = phone;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
public Integer getRoleid() {
return roleid;
}
public void setRoleid(Integer roleid) {
this.roleid = roleid;
}
public Integer getCreateduserid() {
return createduserid;
}
public void setCreateduserid(Integer createduserid) {
this.createduserid = createduserid;
}
public Date getCreatedtime() {
return createdtime;
}
public void setCreatedtime(Date createdtime) {
this.createdtime = createdtime;
}
public Integer getUpdateduserid() {
return updateduserid;
}
public void setUpdateduserid(Integer updateduserid) {
this.updateduserid = updateduserid;
}
public Date getUpdatedtime() {
return updatedtime;
}
public void setUpdatedtime(Date updatedtime) {
this.updatedtime = updatedtime;
}
}
2.创建映射文件
<?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.xinxi2.dao.TSysUserMapper">
<!--
Id:和接口方法名一样
parameterType:参数类型,
resultType:跟类名保持一致
-->
<select id="getListById" parameterType="integer"resultType="com.xinxi2.bean.TSysUser">
select * from t_sys_user s where s.id=#{id}
</select>
</mapper>
3.编写测试类
测试类在测试源文件夹test下的 TSysUserTest 中。
public static void main(String[] args) {
String resource = "mybatis.xml";
InputStream inputStream = null;
SqlSessionFactory sqlSessionFactory=null;
SqlSession sqlSession=null;
TSysUserMapper tSysUserMapper=null;
TSyRoleMapper tSyRoleMapper = null;
try {
inputStream = Resources.getResourceAsStream(resource);
sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
sqlSession = sqlSessionFactory.openSession();
tSysUserMapper = sqlSession.getMapper(TSysUserMapper.class);
List<TSysUser> list = tSysUserMapper.getListById(2);
for (TSysUser user:list){
System.out.println(user.getRealname() + user.getPassword());
}
} catch (IOException e) {
e.printStackTrace();
} finally {
sqlSession.close();
}
}
四、配置解析
1.核心配置文件
2、属性(properties)
我们可以通过properties来实现引用配置文件。
这些属性可以在外部进行配置,并可以进行动态替换。你既可以在典型的 Java 属性文件中配置这些属性,也可以在 properties 元素的子元素中设置。例如编写一个配置文件jdbc.properties:
driver=com.mysql.cj.jdbc.Driver
url=jdbc:mysql://localhost:3306/bianlidian?useUnicode=true&characterEncoding=utf-8&serverTimezone=GMT-8
username=root
pwd=123456
在核心配置文件中引入
注意:如果两个文件有同一个字段优先使用外部配置文件!因为会先运行内部配置文件,再运行外部配置文件,所以内部配置文件会被外部配置文件覆盖!
3、设置(settings)
这是 MyBatis 中极为重要的调整设置,它们会改变 MyBatis 的运行时行为。 下表描述了设置中各项设置的含义、默认值等。
4、类型别名(typeAliases)
类型别名可为 Java 类型设置一个缩写名字。 它仅用于 XML 配置,意在降低冗余的全限定类名书写
<!--别名设置-->
<typeAliases>
<!--给实体类起别名-->
<typeAlias type="com.xinxi2.bean.TsyUser" alias="tsyuser"/>
</typeAliases>
5、映射器(mappers)
方式一:直接绑定xml文件
<!--设置映射XML文件-->
<mappers>
<mapper resource="com/xinxi2/dao/TSysUserMapper.xml"/>
</mappers>
方式二:使用class文件绑定
<!--设置映射XML文件-->
<mappers>
<mapper class="com.xinxi2.dao.TSysUserMapper"/>
</mappers>
方式三:使用扫描包进行注入绑定
<!--设置映射XML文件-->
<mappers>
<!--扫描包-->
<package name="com.xnxi2.dao"/>
</mappers>
注意:
- 接口和他的Mapper配置文件必须同名!
- 接口和他的Mapper配置文件必须在同一个包下!