一、Mybatis核心文件配置
1.自定义实体类别名配置
<!--在核心配置文件中-->
<typeAliases>
<!--方式1:type:别名,alias:当前实体类的全限定名称-->
<typeAlias type="user" alias="com.pojo.user" />
<!--方式2:使用别名的包扫描,它直接将实体所在包指定,别名默认就是当前类名小写-->
<package name="com.pojo" />
</typeAliases>
2.加载映射器的别名配置
<mappers>
<!--之前的写法-->
<mapper resource="com.mapper.UserMapper.xml"></mapper>
<!--使用别名扫描-->
<package name="com.mapper" />
</mappers>
<!--如果使用注解开发(不要加载映射文件,class:直接指向接口的全限定名称)-->
<mappers>
<mapper class="com.mapper.UserMapper"></mapper>
</mappers>
3.poperties配置文件
//jbdc.properites
jdbc.dirver=com.mysql.cj.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/date_03_16?characterEncoding=utf8&useSSL=false&serverTimezone=UTC&allowPublicKeyRetrieval=true
jdbc.username=root
jdbc.password=123456
//在核心配置文件中
<!--添加properties配置文件的文件路径-->
<properties resource="jdbc.properites" />
<!--环境配置-->
<environments default="mysql">
<environment id="mysql">
<!--更新数据管理配置-->
<transactionManager type="JDBC" />
<!--配置数据库连接池,这里使用mybatis自带的-->
<dataSource type="POOLED">
<!--接下来,配置上面已经设置好的属性(以后如需更改,可以直接动态更改)-->
<property name="dirver" value="${jdbc.driver}" />
<property name="url" value="${jdbc.url}" />
<property name="username" value="${jdbc.username}" />
<property name="password" value="${jdbc.password}" />
</dataSource>
</environment>
</environments>
二、Mybatis处理一一映射关系
数据库中user表字段
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-BKpE17eh-1647534699645)(C:\Users\ADMINI~1\AppData\Local\Temp\1647525146317.png)]
<!--在UserMapper.xml配置文件中-->
<!--namespace:接口的全限定名称,告诉mybatis去哪个接口寻找此映射文件-->
<mapper namespace="com.mapper.UserMapper">
<!--resultMap配置:id:当前resultMap的标识,type:实体类的全限定名称/别名-->
<resultMap id="userMap" type="user">
<!--id主键配置:property:实体类的属性名称,column:数据库表中字段列的名称-->
<id property="id" column="id"></id>
<!--其它字段配置-->
<result property="username" column="username" />
<result property="birthday" column="birthday" />
<result property="address" column="address" />
</resultMap>
<!--动态sql片段,将重复的提取出来,在其它的sql中引入即可-->
<sql id="selectAllUserSql">
select * from user
</sql>
<!--查询全部用户-->
<select id="getAllUser" resultMap="userMap">
<!--引入sql字段-->
<include refid="selectAllUserSql" />
</select>
<!--根据id修改用户-->
<update id="changeUserById" parameterType="user">
update user set username=#{username},password=#{password},address=#{address} where id=#{id}
</update>
<!--根据id删除用户-->
<delete id="deleteUserById" paramerType="int">
delete from user where id=#{id}
</delete>
</mapper>
三、动态Sql
四、实现
User
public class User {
private Integer id;
private String username;
private Date birthday;
private String address;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public Date getBirthday() {
return birthday;
}
public void setBirthday(Date birthday) {
this.birthday = birthday;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
@Override
public String toString() {
return "User{" +
"id=" + id +
", username='" + username + '\'' +
", birthday=" + birthday +
", address='" + address + '\'' +
'}';
}
}
Account
public class Account {
private Integer id;
private Integer uid;
private Double money;
private User user;
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public Integer getUid() {
return uid;
}
public void setUid(Integer uid) {
this.uid = uid;
}
public Double getMoney() {
return money;
}
public void setMoney(Double money) {
this.money = money;
}
@Override
public String toString() {
return "Account{" +
"id=" + id +
", uid=" + uid +
", money=" + money +
'}';
}
}
SqlMapConfig.xml
<?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>
<!--properties文件-->
<properties resource="jdbc.properties" />
<!--实体包扫描-->
<typeAliases>
<package name="com.pojo"/>
</typeAliases>
<!--环境配置-->
<environments default="mysql">
<environment id="mysql">
<transactionManager type="jdbc"></transactionManager>
<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>
</environments>
<!--映射文件-->
<mappers>
<package name="com.mapper"/>
</mappers>
</configuration>
AccountMapper.xml
<?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.mapper.AccountMapper">
<resultMap id="accountMap" type="account">
<id property="id" column="id"></id>
<result property="uid" column="uid"></result>
<result property="money" column="money"></result>
<!--mybatis一一映射关系assocation-->
<!--property:账户表中所包含的用户实体属性
column:查询时:账户表和用户表的关系字段
javatype:查询出来的数据类型,通过用户的主键id查询用户实体-->
<association property="user" column="uid" javaType="user">
<id property="id" column="id"></id>
<result property="username" column="username"></result>
<result property="birthday" column="birthday"></result>
<result property="address" column="address"></result>
</association>
</resultMap>
<!--查询账户的所有信息-->
<select id="getAllAccount" resultMap="accountMap">
select
a.*,
u.*
from account a,user u
<where>
a.uid=u.id
</where>
</select>
</mapper>
MybatisTest
import com.mapper.AccountMapper;
import com.mapper.UserMapper;
import com.pojo.Account;
import com.pojo.User;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import javax.annotation.Resource;
import java.io.IOException;
import java.io.InputStream;
import java.util.List;
public class MybatisTest {
InputStream inputStream ;
SqlSession sqlSession ;
AccountMapper accountMapper ;
UserMapper userMapper ;
@Before
public void init() throws IOException {
inputStream = Resources.getResourceAsStream("SqlMapConfig.xml");
SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
SqlSessionFactory sqlSessionFactory = builder.build(inputStream);
sqlSession= sqlSessionFactory.openSession(true);
userMapper = sqlSession.getMapper(UserMapper.class);
accountMapper = sqlSession.getMapper(AccountMapper.class);
}
@Test
public void testGetAllAccount(){
List<Account> accountList = accountMapper.getAllAccount();
if (accountList != null){
for(Account account : accountList){
System.out.println(account);
User user = account.getUser();
System.out.println("**************");
System.out.println(user);
}
}
}
@After
public void close() throws IOException {
inputStream.close();
sqlSession.commit();
sqlSession.close();
}
}
ount : accountList){
System.out.println(account);
User user = account.getUser();
System.out.println("**************");
System.out.println(user);
}
}
}
@After
public void close() throws IOException {
inputStream.close();
sqlSession.commit();
sqlSession.close();
}
}