| ±à¼ÍƼö: |
| ±¾ÎÄÀ´×ÔÓÚcnblogs£¬½éÉÜÁËÈçºÎ´´½¨springBootÏîÄ¿£¬Êý¾Ý¿â£¬ÊµÌåÀàºÍ´´½¨Dao²ã´úÂ룬
´´½¨XMLÎļþ´úÂ룬 ´´½¨Dao²ã²âÊÔÀàµÈ¡£ |
|
1 °æ±¾ËµÃ÷
springboot£º2.0
jdk£º1.8

2 ´´½¨springBootÏîÄ¿
´´½¨ÏîĿʱ¹´Ñ¡±ØÒªweb£¬MySQL£¬mybatisÏà¹ØÒÀÀµ
´´½¨Íê³ÉºóÔÙpomÎļþÖÐÌí¼Ó×Ô¶¯²¿Êð¡¢lombokÏà¹ØÒÀÀµ
2.1 ±àд²âÊÔÀà
¼¼ÇÉ01£ºÏîÄ¿´´½¨³É¹¦ºóÏȽ«mybatisºÍmysqlÏà¹ØµÄjar×¢Ê͵ô£¬ÔÚµ½¿ØÖƲãÖд´½¨Ò»¸ö¼òµ¥µÄ²âÊÔÀàÀ´È·ÈÏÏîÄ¿ÊÇ·ñ´´½¨³É¹¦
package cn.test.demo.mybatis
_ demo02.controller;
import org.springframework.web.bind.annotation.
GetMapping;
import org.springframework. web.bind.annotation.
RequestMapping;
import org.springframework. web.bind.annotation.
RestController;
/**
* @author ÍõÑî˧
* @create 2018-04-08 7:53
* @desc ¿ØÖƲã²âÊÔÀà
**/
@RestController
@RequestMapping (value = "/test")
public class TestController {
@GetMapping (value = "/test01")
public String test01() {
return "HELLO BOY";
}
} |
2.2 ÅäÖÃÎļþÐÅÏ¢
server.port=9999
server.servlet.path=/dev
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://127.0.0.1:3306 /testdemo
? useUnicode = true & characterEncoding =
UTF-8 && useSSL = false
jdbc.username=root
jdbc.password=root
mabatis_config_ file = mybatis-config.xml
mapper_path =/mapper/**.xml
entity_package = cn.test.demo.mybatis_demo02.entity
|
3 ´´½¨Êý¾Ý¿â
¸ù¾ÝspringbootµÄÅäÖÃÐÅÏ¢£¬´´½¨Ò»¸öÊý¾Ý¿â£»²¢ÔÚÊý¾Ý¿âÖд´½¨Ò»¸ö±í
¼¼ÇÉ01£º±ØÐëÔÚspringbootÅäÖÃÎļþÖÐÅäÖõÄÄǸöÊý¾Ý¿âÖнøÐÐÊý¾Ý±íµÄ´´½¨
/*
Navicat MySQL Data Transfer
Source Server : mysql5.4
Source Server Version : 50540
Source Host : localhost:3306
Source Database : testdemo
Target Server Type : MYSQL
Target Server Version : 50540
File Encoding : 65001
Date: 2018-04-08 13:33:08
*/
SET FOREIGN_KEY_CHECKS=0;
-- ----------------------------
-- Table structure for `tb_area`
-- ----------------------------
DROP TABLE IF EXISTS `tb_area`;
CREATE TABLE `tb_area` (
`area_id` int(2) NOT NULL AUTO_INCREMENT,
`area_name` varchar(200) NOT NULL,
`priority` int(2) NOT NULL DEFAULT '0',
`create_time` datetime NOT NULL,
`last_edit_time` datetime NOT NULL,
PRIMARY KEY (`area_id`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8mb4;
-- ----------------------------
-- Records of tb_area
-- ----------------------------
INSERT INTO `tb_area` VALUES ('1', '¶«Ô·', '0',
'2018-03-07 08:50:37', '2018-04-08 13:28:58');
INSERT INTO `tb_area` VALUES ('2', 'ÄÏÔ·', '1',
'2018-04-08 09:44:48', '2018-04-08 09:44:48');
|
4 ´´½¨ÊµÌåÀà
¼¼ÇÉ01£º¿ÉÒÔÀûÓÃmybatisÌṩµÄÉú³ÉÆ÷À´×Ô¶¯Éú³Éentity¡¢dao¡¢xml¡¢service¡¢controller¶ÔÓ¦µÄ´úÂë
¼¼ÇÉ02£ºÔÚ±àд´úÂëʱ¿ÉÒÔ¿ªÆô´úÂëÌáʾ

package cn.test.demo
.mybatis_demo02.entity;
import java.util.Date;
/**
* @author ÍõÑî˧
* @create 2018-04-08 8:40
* @desc
**/
public class Area {
// @TableId (value="area_id", type=
IdType.AUTO)
private Integer areaId;
// @TableField ("area_name")
private String areaName;
private Integer priority;
// @TableField ("create_time")
private Date createTime;
// @TableField ("last_edit_time")
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;
}
@Override
public String toString () {
return "Area {" +
"areaId =" + areaId +
", areaName ='" + areaName + '\''
+
", priority =" + priority +
", createTime
}
} |
5 ÅäÖò¿·Ö
5.1 POMÅäÖÃ
±£Ö¤pom.xmlÎļþÖÐÓÐmybatis¡¢mysql¡¢mysqlÇý¶¯ÕâÈý¸ö¶ÔÓ¦µÄÒÀÀµ
<!--mysqlÊý¾Ý¿â--> <dependency>
<groupId> mysql </groupId>
<artifactId> mysql-connector-java </artifactId>
<scope> runtime </scope> </dependency>
<!--Êý¾Ý¿âÁ¬½Ó³Ø--> <dependency>
<groupId> com.mchange </groupId>
<artifactId> c3p0 </artifactId>
<version> 0.9.5.2 </version> </dependency>
<!--mybatis--> <dependency>
<groupId> org.mybatis.spring.boot </groupId>
<artifactId> mybatis-spring-boot-starter
</artifactId>
<version> 1.3.2 </version> </dependency> |
5.2 mybatisÏà¹ØÅäÖÃ
ÔÚersourcesÎļþ¼ÐÖд´½¨Ò»¸ömybatis-config.xmlÎļþÓÃÀ´mybatisÏà¹ØµÄÅäÖÃ
¼¼ÇÉ01£ºÔÚÏîÄ¿Æô¶¯µÄʱºò»á×Ô¶¯¼ÓÔØresourcesÖеÄÎļþ½øÐÐÈ«¾ÖµÄÅäÖã¬ËùÓÐmybatisµÄÅäÖÃÎļþÒ²»á±»¼ÓÔØ
5.2.1 <setting name="useGeneratedKeys"
value="true"/>
¿ªÆôJDBCµÄgetGeneratedKeys»ñÈ¡Êý¾Ý¿â×ÔÔöÖ÷¼ü£¬¼´£ºµ±ÎÒÃÇÐÂÔöÒ»ÌõÊý¾Ýʱ»á×Ô¶¯ÉèÖÃÖ÷¼üÖµ
5.2.2 <setting name="useColumnLabel"
value="ture" />
ʹÓÃÁбêÇ©Ìæ»»ÁбðÃû
5.2.3 <setting name="mapUnderscoreToCamelCase"
value="true" />
¿ªÆôÍÕ·åת»»£¬¼´£ºÊý¾Ý¿âÖеÄ×Ö¶ÎÃûÈ«²¿ÊÇСдºÍÏ»®Ïß×é³É£¬ÊµÌåÀàÖеÄÊôÐÔÈ«²¿Ê¹ÓÃÍÕ·åÔÔòʱËûÃÇÖ®¼ä¾Í»áÊÇÒ»Ò»¶ÔÓ¦µÄ¹ØÏµ
< ?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µÄ getGeneratedKeys »ñÈ¡Êý¾Ý¿â×ÔÔöÖ÷¼ü-->
<setting name = " useGeneratedKeys "
value ="true"/> <!--ʹÓÃÁбêÇ©Ìæ»»ÁбðÃû-->
<setting name = "useColumnLabel"
valu e= "ture" /> <!--¿ªÆôÍÕ·åת»»-->
<setting name = "mapUnderscoreToCamelCase"
value = "true" /> </settings>
</configuration> |
5.3 DataSourceÅäÖúÍSqlSessionFactoryÅäÖÃ
ÓÉÓÚÎÒÃÇʹÓÃc3p0×÷ΪÊý¾Ý¿âÁ¬½Ó³Ø£¬ËùÒÔÎÒÃÇÔÚÅäÖÃDataSourceÖ±½Ó¶Ô³Éc3p0µÄÁ¬½ÓÐÅÏ¢½øÐÐÅäÖü´¿É
5.3.1 ´´½¨Ò»¸öDataSourceConfigurationÀàÀ´ÅäÖÃDataSource
×¢Ò⣺ÀàÃû¿ÉÒÔËæ±ãÈ¡
¼¼ÇÉ01£ºÔÚÆô¶¯Ààͬһ¼¶±ð»òÆô¶¯ÀàÏÂÃæ¼¶±ðµÄµØ·½´´½¨Ò»¸öconfig°üÀ´´æ·ÅjavaÅäÖÃÀà

¼¼ÇÉ02£ºjavaÅäÖÃÀàÐèÒªÔÚÀàÉÏÌí¼Ó@Configuration×¢½âÀ´Ö¸Ã÷¸ÃÀàÊÇÒ»¸öÅäÖÃÀà
¼¼ÇÉ03£ºDataSourceConfigurationÅäÖÃÀà˵Ã÷
Éú³ÉÒ»¸öDataSourceʵÀý²¢×¢Èëµ½BeanÈÝÆ÷ÖÐ
¼¼ÇÉ01£ºÏòÊý¾Ý¿âÁ¬½ÓÐÅÏ¢£¬ÎÒÃÇ¿ÉÒÔ°ÑËü·Åµ½springbootµÄÈ«¾ÖÅäÖÃÎļþÖÐÈ¥£¬È»ºóÔÚÐèÒªÓõ½µÄµØ·½Í¨¹ý@Value×¢½âÀ´»ñÈ¡»ñÈ¡£¬ÕâÑù¾Í¿ÉÒÔ×öµ½Ò»¸ÄÈ«¸ÄµÄ×÷Óá¡¡¡


¼¼ÇÉ02£ºDataSourceÅäÖÃÀàÉÏ»¹ÐèÒªÀûÓÃ@MapperScan×¢½âÀ´ÅäÖÃmapperÓ³ÉäÆ÷µÄɨÃè·¾¶£¬ÀýÈ磺
| @MapperScan
("cn.test.demo.mybatis_demo02.dao")
// mapperÓ³ÉäÆ÷µÄɨÃè·¾¶ |

package cn.test.demo.mybatis_demo02.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 javax.sql.CommonDataSource;
import java.beans.PropertyVetoException;
/**
* @author ÍõÑî˧
* @create 2018-04-08 8:09
* @desc DataSourceÅäÖÃ
**/
@Configuration
@MapperScan("cn.test.demo.mybatis_demo02.dao")
// mapperÓ³ÉäÆ÷µÄɨÃè·¾¶
public class DataSourceConfiguration {
@Value("${jdbc.driver}")
private String jdbcDriver;
@Value("${jdbc.password}")
private String jdbcPassword;
@Value("${jdbc.username}")
private String jdbcUsername;
@Value("${jdbc.url}")
private String jdbcUrl;
@Bean(name = "dataSource")
public ComboPooledDataSource createDataSource()
throws PropertyVetoException {
ComboPooledDataSource dataSource = new ComboPooledDataSource();
dataSource.setDriverClass(jdbcDriver);
dataSource.setJdbcUrl(jdbcUrl);
dataSource.setUser(jdbcUsername);
dataSource.setPassword(jdbcPassword);
dataSource.setAutoCommitOnClose(false); // ¹Ø±ÕÁ¬½Óºó²»»á×Ô¶¯½øÐÐÊÂÎñÌá½»
return dataSource;
}
} |
5.3.2 ´´½¨Ò»¸öcrateSqlSessionFactoryBeanÀàÀ´ÅäÖÃSqlSessionFactory
×¢Ò⣺ÀàÃû¿ÉÒÔËæ±ãÈ¡
¼¼ÇÉ01£ºjavaÅäÖÃÀàÐèÒªÔÚÀàÉÏÌí¼Ó@Configuration×¢½âÀ´Ö¸Ã÷¸ÃÀàÊÇÒ»¸öÅäÖÃÀà
¼¼ÇÉ02£ºÔÚÅäÖÃSqlSessionFactoryBeanʱÐèÒªÓõ½DataSrouceʵÀý£¬ËùÒÔÐèÒªÔÚÅäÖÃSqlSessionFactoryBeanµÄÅäÖÃÀàÒÀÀµ×¢ÈëDataSrouceʵÀý£¬ÀýÈ磺
@Autowired
@Qualifier("dataSource")
private DataSource dataSource; |
¼¼ÇÉ03£ºÅäÖÃ˵Ã÷
SqlSessionFactoryBean²¢×¢Èëµ½BeanÈÝÆ÷ÖÐ

package cn.test.demo.mybatis
_ demo02.config.dao;
import org.apache.ibatis.session. SqlSessionFactory;
import org.mybatis.spring .SqlSessionFactoryBean;
import org.mybatis.spring.annotation .MapperScan;
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;
/**
* @author ÍõÑî˧
* @create 2018-04-08 8:22
* @desc SessionFactoryÅäÖÃÀà
**/
@Configuration
//@MapperScan
public class Session FactoryConfiguration {
@Value (" ${mabatis_config_file} ")
private String mybatis ConfigFilePath;
@Value( "${mapper_path}")
private String mapperPath;
@Value( "${entity_package}")
private String entityPackage;
@Autowired
@Qualifier("dataSource")
private DataSource dataSource;
@Bean( name = "sqlSessionFactory")
public SqlSession FactoryBean crateSqlSession
FactoryBean () throws IOException {
SqlSession FactoryBean sqlSession FactoryBean
= new SqlSessionFactoryBean(); // ´´½¨SqlSession
FactoryBeanʵÀý
sqlSession FactoryBean.setConfigLocation (new
ClassPathResource ( mybatisConfigFilePath ));
// ɨÃèmybatisÅäÖÃÎļþ
// ÉèÖà mappe rÓ³ÉäÆ÷¶ÔÓ¦µÄXMLÎļþµÄɨÃè·¾¶
PathMatching ResourcePatternResolver resolver
= new PathMatchingResource PatternResolver ();
String packageSearch Path = PathMatchingResourcePatternResolver
.CLASSPATH_ALL_URL_PREFIX + mapperPath ;
sqlSessionFactoryBean .setMapperLocations (resolver.getResources
(packageSearchPath));
// ÉèÖÃÊý¾Ý¿âÁ¬½ÓÐÅÏ¢
sqlSessionFactoryBean.setDataSource (dataSource);
// ÉèÖÃʵÌåÀàɨÃè·¾¶
sqlSessionFactoryBean.setTypeAliasesPackage (entityPackage);
return sqlSession FactoryBean;
} |
¡¡½«É¨Ãè·¾¶ÅäÖõ½springbootµÄÈ«¾ÖÅäÖÃÅäÖÃÎļþÖУ¬È»ºóÀûÓÃ@ValueÈ¥»ñÈ¡¼´¿É£¬ÕâÑù¼È¿ÉÒÔʵÏÖÒ»¸ÄÈ«¸ÄµÄЧ¹û£»ÀýÈ磺



@Autowired½øÐÐÒÀÀµ×¢ÈëµÄʱºò¿ÉÒÔÀûÓÃ@QualifierÖ¸¶¨Ãû×Ö£¬ÀýÈ磺¡¡¡¡¡¡
@Autowired
@Qualifier("dataSource")
private DataSource dataSource; |
6 ´´½¨Dao²ã´úÂë
Dao²ãÔÚʹÓÃmybatisʵÏÖʱҲ½Ð×÷MapperÓ³ÉäÆ÷£¬ÆäʵMapperÓ³ÉäÆ÷¾ÍÊÇÒ»¸ö½Ó¿Ú¶øÒÑ
package cn.test.demo.mybatis_demo02.dao;
import cn.test.demo.mybatis_demo02.entity.Area;
import com.sun.applet2.preloader.event.InitEvent;
import java.util.List;
/**
* @author ÍõÑî˧
* @create 2018-04-08 8:42
* @desc
**/
public interface AreaDao {
List<Area> queryArea();
Area queryById(Integer areaId);
Integer insertArea(Area area);
Integer updateArea(Area area);
Integer deleteArea(Integer areaId);
} |
7 ´´½¨XMLÎļþ´úÂë
Ò»¸öXMLÎļþºÍÒ»¸öMapperÓ³ÉäÆ÷¶ÔÓ¦£¬¾ßÌåÕâô¶ÔÓ¦Çë²Î¼ûmybatisÏȹز©ÎÄ
<?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 = "cn.test.demo.mybatis
_ demo02.dao.AreaDao">
<!-- ͨÓòéѯӳÉä½á¹û -->
<!--<resultMap id = "BaseResultMap"
type = "org.ibase4j.entity.TbArea">-->
<!--<id column = "area_id" property
="areaId" />-->
<!--<result column = "area_name"
property="areaName" />-->
<!--<result column = "priority"
property="priority" />-->
<!--<result column = "create_time"
property="createTime" />-->
<!--<result column = "last_edit_time"
property="lastEditTime" />-->
<!--</resultMap >-->
<select id = "queryArea" resultType
= "cn.test.demo.mybatis _ demo02.entity.Area">
SELECT
*
FROM
tb_area
ORDER BY
priority
DESC
</select>
<select id ="queryById" resultType
="cn.test.demo.mybatis _demo02 .entity .Area">
SELECT
*
FROM
tb_area
WHERE
area_id = #{areaId}
</select>
<insert id ="insertArea"
useGeneratedKeys ="true" keyProperty
="areaId" keyColumn ="area_id"
parameterType ="cn.test.demo.mybatis _demo02.entity.Area">
INSERT INTO
tb_area (area_name, priority, create_time, last_edit_time)
VALUES
( #{areaName}, #{priority}, #{createTime}, #{lastEditTime})
</insert>
<update id ="updateArea" parameterType
="cn.test. demo.mybatis _demo02. 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> |
8 ´´½¨Dao²ã²âÊÔÀà
¿Ó01£ºÔÚ²âÊÔÀàÖнøÐÐÒÀÀµ×¢Èëʱ¿ÉÄܻᱨ´í£¬±¨´íÐÅϢΪ£ºÕÒ²»µ½Ïà¹ØµÄBean
ÔÒò£ºIDEAÊÇÒ»¸ö±È½ÏÖÇÄÜµÄ±à¼Æ÷£¬ËùÒÔÔÚ½øÐÐÒÀÀµ×¢ÈëµÄʱºò¾Í»á¼ì²éÐèҪעÈëµÄBeanÔÚÈÝÆ÷ÖÐÊÇ·ñ´æÔÚ£¬Èç¹û²»´æÔھͻᱨ³öÕâÑùµÄ´íÎó£»µ«ÊÇÓÉÓÚIDEAµÄ¸Ã¹¦ÄÜ»¹²»¹»ÍêÉÆËùÒÔ¼´Ê¹BeanÈÝÆ÷ÓжÔÓ¦µÄBeanÒ²»á±¨³öÕÒ²»µ½Ïà¹ØBeanµÄ´íÎó
½â¾ö°ì·¨£º½«IDEAÕâ¸ö¹¦Äܵı¨´í¼¶±ðµ÷µÍ£¬µ÷³Éwarning¼´¿É£¬ÀýÈ磺

package cn.test.demo.mybatis_
demo02.dao;
import cn.test.demo.mybatis_ demo02.entity.Area;
import lombok.extern. slf4j.Slf4j;
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 static org.junit .Assert.*;
@RunWith (SpringRunner.class)
@SpringBootTest
@Slf4j
public class AreaDaoTest {
@Autowired
private AreaDao areaDao;
@Test
public void queryArea () throws Exception {
List <Area> areaList = areaDao.queryArea
();
// assertEquals (1, areaList.size());
log.info ("»ñÈ¡µ½µÄÊý¾ÝΪ£º{}", areaList);
}
@Test
public void queryById () throws Exception {
Area area = areaDao.queryById(1);
log.info ("»ñÈ¡µ½µÄÊý¾ÝΪ£º{}",area.toString());
}
@Test
// @Ignore
public void insertArea () throws Exception {
Area area = new Area ();
area.setAreaName ("ÄÏÔ·");
area.setPriority (1);
area.setCreateTime(new Date ());
area.setLastEditTime (new Date());
Integer result = areaDao.insertArea (area);
log.info ("²åÈëÍê³ÉµÄÊý¾ÝΪ£º{}", result);
}
@Test
public void updateArea () throws Exception {
Area area = new Area ();
area.setAreaName ("¶«Ô·");
area.setLastEditTime (new Date());
area.setAreaId (1);
Integer result = areaDao.updateArea (area);
log.info ("¸üÐÂÍê³ÉºóµÃµ½µÄ½á¹ûΪ£º{}", result);
}
@Test
public void deleteArea () throws Exception {
} |
|