0
点赞
收藏
分享

微信扫一扫

Mybatis相关配置以及动态Sql

技术只适用于干活 2022-03-18 阅读 27
java其他

一、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();
    }
}
举报

相关推荐

0 条评论