Mybatis 入门到精通

1. 引入依赖

mybatis依赖

<dependency>
			<groupId>org.mybatis.spring.boot</groupId>
			<artifactId>mybatis-spring-boot-starter</artifactId>
			<version>1.3.2</version>
		</dependency>

在这里 我们引入mysql依赖

<dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
        </dependency>
还需要链接池
      <dependency>
            <groupId>com.mchange</groupId>
            <artifactId>c3p0</artifactId>
            <version>0.9.5.2</version>
        </dependency>

mybatis配置文件


简单配置模版:

<?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>
    <!-- 配置全局属性 -->
    <settings>
        <!-- 使用jdbc的geyGeneratedKeys获取数据库自增主键 -->
        <setting name="useGeneratedKeys" value="true"/>

        <!-- 使用列标签替换别名 默认true -->
        <setting name="useColumnLabel" value="true"/>

        <!-- 开启驼峰命名转化:Table{create_time} -> Entity{createTime}  -->
        <setting name="mapUnderscoreToCamelCase" value="true"/>
    </settings>
</configuration>

配置数据库链接和mapper文件: application.properties

jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://127.0.0.1:3306/demo?seUnicode=true&characterEncoding=UTF8
jdbc.username=root
jdbc.password=123

#mybatis
mybatis.config-file=mybatis-config.xml
mapper_path=/mapper/**.xml
entity_package=com.example.demo.entity

创建数据库链接配置

package com.example.demo.config.dao;

import com.mchange.v2.c3p0.ComboPooledDataSource;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import java.beans.PropertyVetoException;

/**
 * com.example.demo.config.dao
 * icourt
 * 2018/4/9
 * author:asange
 * email:[email protected]
 **/
@Configuration
//配置mybatis mapper的扫描路径
@MapperScan("com.example.demo.dao")
public class DataSourceConfiguration {
    @Value("${jdbc.driver}")
    String jdbcDriver;
    @Value("${jdbc.url}")
    String jdbcUrl;
    @Value("${jdbc.username}")
    String jdbcUsername;
    @Value("${jdbc.password}")
    String jdbcPassword;

    @Bean(name = "dataSource")
    public ComboPooledDataSource createDataSource() throws PropertyVetoException {
        ComboPooledDataSource dataSource = new ComboPooledDataSource();

        dataSource.setDriverClass(jdbcDriver);
        dataSource.setJdbcUrl(jdbcUrl);
        dataSource.setUser(jdbcUsername);
        dataSource.setPassword(jdbcPassword);

        //关闭链接后,不自动commit
        dataSource.setAutoCommitOnClose(false);
        return dataSource;
    }
}

创建mybatis mapper映射

package com.example.demo.config.dao;

import org.mybatis.spring.SqlSessionFactoryBean;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.io.ClassPathResource;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;

import javax.sql.DataSource;
import java.io.IOException;

/**
 * com.example.demo.config.dao
 * icourt
 * 2018/4/9
 * author:asange
 * email:[email protected]
 **/
@Configuration
public class SessionFactoryConfiguration {
    @Value("${mybatis.config-file}")
    private String mybatisConfigurationFilePath;

    @Value("${mapper_path}")
    private String mapperPath;


    @Value("${entity_package}")
    private String  entityPackage;

    @Qualifier("dataSource")
    @Autowired
    private DataSource dataSource;

    @Bean(name = "sqlSessionFactory")
    public SqlSessionFactoryBean createSqlSessionFactoryBean() throws IOException {
        SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean();
        sqlSessionFactoryBean.setConfigLocation(new ClassPathResource(mybatisConfigurationFilePath));
        PathMatchingResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();
        String packageSearchPath = PathMatchingResourcePatternResolver.CLASSPATH_ALL_URL_PREFIX + mapperPath;
        sqlSessionFactoryBean.setMapperLocations(resolver.getResources(packageSearchPath));
        sqlSessionFactoryBean.setDataSource(dataSource);
        sqlSessionFactoryBean.setTypeAliasesPackage(entityPackage);
        return sqlSessionFactoryBean;
    }
}

模型:

package com.example.demo.entity;


import java.util.Date;

/**
 * com.example.demo.entity
 * icourt
 * 2018/4/8
 * author:asange
 * email:[email protected]
 **/
public class Area {

    private Integer areaId;
    private String areaName;
    private Integer priority;
    private Date createTime;
    private Date lastEditTime;

    public Integer getAreaId() {
        return areaId;
    }

    public void setAreaId(Integer areaId) {
        this.areaId = areaId;
    }

    public String getAreaName() {
        return areaName;
    }

    public void setAreaName(String areaName) {
        this.areaName = areaName;
    }

    public Integer getPriority() {
        return priority;
    }

    public void setPriority(Integer priority) {
        this.priority = priority;
    }

    public Date getCreateTime() {
        return createTime;
    }

    public void setCreateTime(Date createTime) {
        this.createTime = createTime;
    }

    public Date getLastEditTime() {
        return lastEditTime;
    }

    public void setLastEditTime(Date lastEditTime) {
        this.lastEditTime = lastEditTime;
    }
}

dao层提供简单的crud操作声明

package com.example.demo.dao;

import com.example.demo.entity.Area;

import java.util.List;

/**
 * com.example.demo.dao
 * icourt
 * 2018/4/9
 * author:asange
 * email:[email protected]
 **/
public interface AreaDao {

    List<Area> queryArea();

    Area queryAreaById(int id);

    int insertArea(Area area);

    int updateArea(Area area);

    int deleteArea(int id);
}
mapper文件映射


完整xml代码

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://www.mybatis.org/dtd/mybatis-3-mapper.dtd">

<mapper namespace="com.example.demo.dao.AreaDao">

    <select id="queryArea" resultType="com.example.demo.entity.Area">
        SELECT area_id,area_name,priority,create_time,last_edit_time
        FROM tb_area
        ORDER BY priority
        DESC
    </select>
    <select id="queryAreaById" resultType="com.example.demo.entity.Area">
        SELECT *
        FROM tb_area
        WHERE
        area_id=#{areaId}
    </select>
    <insert id="insertArea"
            useGeneratedKeys="true"
            keyProperty="areaId"
            keyColumn="area_id"
            parameterType="com.example.demo.entity.Area">

        INSERT INTO
        tb_area(area_name,priority,
        create_time,last_edit_time)
        VALUES
        (#{areaName},#{priority},#{createTime},#{lastEditTime})
    </insert>
    <update id="updateArea" parameterType="com.example.demo.entity.Area">
        update tb_area
        <set>
            <if test="areaName!=null">area_name=#{areaName},</if>
            <if test="priority!=null">priority=#{priority},</if>
            <if test="lastEditTime!=null">last_edit_time=#{lastEditTime},</if>
        </set>
        where area_id=#{areaId}
    </update>
    <delete id="deleteArea">
        DELETE FROM
        tb_area
        WHERE
        area_id=#{areaId}
    </delete>
</mapper>

测试用例如下:

package com.example.demo.dao;

import com.example.demo.entity.Area;
import org.junit.Ignore;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;

import java.util.Date;
import java.util.List;
import java.util.Random;

import static org.junit.Assert.*;

/**
 * com.example.demo.dao
 * icourt
 * 2018/4/9
 * author:asange
 * email:[email protected]
 **/
@RunWith(SpringRunner.class)
@SpringBootTest
public class AreaDaoTest {

    @Autowired
    private AreaDao areaDao;

    @Test
    public void queryArea() {
        List<Area> areas = areaDao.queryArea();
        System.out.println("======>queryArea:" + areas);
        assertEquals(2, areas.size());
    }

    @Test
    public void queryAreaById() {
        Area area = areaDao.queryAreaById(3);
        System.out.println("======>queryAreaById:" + area);
    }

    @Test
    public void insertArea() {
        Area area = new Area();
        area.setAreaName("hh_" + System.currentTimeMillis());
        area.setPriority(new Random().nextInt(10));
        area.setCreateTime(new Date(System.currentTimeMillis()));
        area.setLastEditTime(new Date(System.currentTimeMillis()));
        areaDao.insertArea(area);

        queryArea();
    }

    @Test
    public void updateArea() {
        Area area = areaDao.queryAreaById(3);
        area.setLastEditTime(new Date(System.currentTimeMillis()));
        areaDao.updateArea(area);
    }

    @Test
    public void deleteArea() {
        areaDao.deleteArea(4);
    }
}

本例子代码猛击


猜你喜欢

转载自blog.csdn.net/axuanqq/article/details/79859753