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); } }
本例子代码猛击