2018-6-4

补充mybatis-spring-boot注解的使用


1.导包

只需要再导入mysql+mybatis两个包

  1. <dependency>
  2. <groupId>org.mybatis.spring.boot</groupId>
  3. <artifactId>mybatis-spring-boot-starter</artifactId>
  4. <version>1.3.2</version>
  5. </dependency>
  6. <dependency>
  7. <groupId>mysql</groupId>
  8. <artifactId>mysql-connector-java</artifactId>
  9. <scope>runtime</scope>
  10. </dependency>

2.数据源

application.yml

  1. spring:
  2. datasource:
  3. driver-class-name: com.mysql.jdbc.Driver
  4. url: jdbc:mysql://118.89.177.110:3306/test?useUnicode=true&characterEncoding=utf-8&useSSL=false
  5. username: root
  6. password: 336699yst
  7. mybatis:
  8. configuration:
  9. map-underscore-to-camel-case: true #开启驼峰命名(数据库d_id匹配实体类dId)
  10. logging:
  11. level:
  12. cn.zyzpp.xxxx.mapper: debug #打印SQL日志

3.实体类

  1. public class User {
  2. private int id;
  3. private String name;
  4. private Integer age;
  5. public User( String name, Integer age) {
  6. this.name = name;
  7. this.age = age;
  8. }
  9. public User() {
  10. }
  11. @Override
  12. public String toString() {
  13. return "User{" +
  14. "id=" + id +
  15. ", name='" + name + '\'' +
  16. ", age=" + age +
  17. '}';
  18. }
  19. ...getter
  20. ...setter
  21. }

4.@Mapper

在启动类中添加对mapper包扫描@MapperScan

  1. //@MapperScan("") 相比指定扫描包的路径,我更喜欢在mapper接口上加mapper注解
  2. @SpringBootApplication
  3. public class MybatisZhujieApplication {
  4. public static void main(String[] args) {
  5. SpringApplication.run(MybatisZhujieApplication.class, args);
  6. }
  7. }

或者直接在Mapper类上面添加注解@Mapper

  1. @Mapper
  2. //@Repository此注解可不加,加是防止在使用@Autowired注解时IDEA报错
  3. public interface UserMapper {
  4. @Delete("drop table if exists user")
  5. void dropTable();
  6. @Insert("CREATE TABLE IF NOT EXISTS user(id INT UNSIGNED AUTO_INCREMENT,name VARCHAR(100) NOT NULL," +
  7. " age INT NOT NULL,PRIMARY KEY (id)" +
  8. ")ENGINE=InnoDB DEFAULT CHARSET=utf8;")
  9. void createTable();
  10. @Insert("insert into user(name,age) values(#{name},#{age})")
  11. void insert(User user);
  12. @Select("select id,name,age from user")
  13. List<User> findAll();
  14. }

5.测试使用

  1. @RunWith(SpringRunner.class)
  2. @SpringBootTest
  3. public class MybatisZhujieApplicationTests {
  4. @Autowired
  5. UserMapper userMapper;
  6. // 每次执行Test之前先删除表,创建表
  7. @Before
  8. public void before() throws Exception {
  9. userMapper.dropTable();
  10. userMapper.createTable();
  11. }
  12. @Test
  13. public void contextLoads() {
  14. userMapper.insert(new User("name",18));
  15. userMapper.insert(new User("name2",19));
  16. userMapper.insert(new User("name3",20));
  17. System.out.println(userMapper.findAll());
  18. }
  19. }

执行结果:

[User{id=1, name='name', age=18}, User{id=2, name='name2', age=19}, User{id=3, name='name3', age=20}]


2018-6-3

二:XML配置方式


1.mybatis-config配置

在resources下新建mybatis-config.xml

  1. <?xml version="1.0" encoding="UTF-8" ?>
  2. <!DOCTYPE configuration
  3. PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
  4. "http://mybatis.org/dtd/mybatis-3-config.dtd">
  5. <configuration>
  6. <!-- 配置全局属性 -->
  7. <settings>
  8. <!-- 使用jdbc的getGeneratedKeys 获取数据库自增主键值 -->
  9. <setting name="useGeneratedKeys" value="true"/>
  10. <!-- 使用列别名替换列名 默认:true
  11. select name as title from table
  12. -->
  13. <setting name="useColumnLabel" value="true"/>
  14. <!-- 开启驼峰命名转换:Table(create_time) -> Entity(createTime) -->
  15. <setting name="mapUnderscoreToCamelCase" value="true"/>
  16. </settings>
  17. </configuration>

2.Entity实体类

示例:

  1. package cn.zyzpp.entity;
  2. import java.util.Date;
  3. /**
  4. * Created by 巅峰小学生 2018年3月11日 下午1:21:17
  5. */
  6. public class Area {
  7. //主键ID
  8. private Integer areaId;
  9. //名称
  10. private String areaName;
  11. //权重,越大越靠前显示
  12. private Integer priority;
  13. //创建时间
  14. private Date createTime;
  15. //更新时间
  16. private Date lastEditTime;
  17. ...
  18. }

3.Dao层接口

  1. package cn.zyzpp.dao;
  2. import java.util.List;
  3. import cn.zyzpp.entity.Area;
  4. /**
  5. * Created by 巅峰小学生 2018年3月11日 下午7:12:04
  6. */
  7. public interface AreaDao {
  8. /**
  9. * 列出区域列表
  10. *
  11. * @return areaList
  12. */
  13. List<Area> queryArea();
  14. /**
  15. * 根据Id列出具体区域
  16. *
  17. * @return area
  18. */
  19. Area queryAreaById(int areaId);
  20. /**
  21. * 插入区域信息
  22. *
  23. * @param area
  24. * @return
  25. */
  26. int insertArea(Area area);
  27. /**
  28. * 更新区域信息
  29. *
  30. * @param area
  31. * @return
  32. */
  33. int updateArea(Area area);
  34. /**
  35. * 删除区域信息
  36. *
  37. * @param areaId
  38. * @return
  39. */
  40. int deleteArea(int areaId);
  41. }

4.Mapper映射

在/resources/mapper/下新建AreaDao.xml

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!DOCTYPE mapper
  3. PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  4. "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
  5. <!-- 声明接口地址 -->
  6. <mapper namespace="cn.zyzpp.dao.AreaDao">
  7. <!-- 接口方法 -->
  8. <select id="queryArea" resultType="cn.zyzpp.entity.Area">
  9. SELECT area_id, area_name,
  10. priority, create_time, last_edit_time
  11. FROM tb_area
  12. ORDER BY priority
  13. DESC
  14. </select>
  15. <select id="queryAreaById" resultType="cn.zyzpp.entity.Area">
  16. SELECT area_id, area_name,
  17. priority, create_time, last_edit_time
  18. FROM tb_area
  19. WHERE
  20. area_id=#{areaId}
  21. </select>
  22. <insert id="insertArea" useGeneratedKeys="true" keyProperty="areaId"
  23. keyColumn="area_id" parameterType="cn.zyzpp.entity.Area">
  24. INSERT INTO
  25. tb_area(area_name,priority,
  26. create_time,last_edit_time)
  27. VALUES
  28. (#{areaName},#{priority},
  29. #{createTime},#{lastEditTime})
  30. </insert>
  31. <update id="updateArea" parameterType="cn.zyzpp.entity.Area">
  32. update tb_area
  33. <set>
  34. <if test="areaName != null">area_name=#{areaName},</if>
  35. <if test="priority != null">priority=#{priority},</if>
  36. <if test="lastEditTime != null">last_edit_time=#{lastEditTime}</if>
  37. </set>
  38. where area_id=#{areaId}
  39. </update>
  40. <delete id="deleteArea">
  41. DELETE FROM
  42. tb_area
  43. WHERE
  44. area_id =
  45. #{areaId}
  46. </delete>
  47. </mapper>

5.application.properties自定义配置

  1. #mysql
  2. jdbc.driverClass=com.mysql.jdbc.Driver
  3. jdbc.url=jdbc:mysql://127.0.0.1:3306/test?useUnicode=true&characterEncoding=utf-8&useSSL=false
  4. jdbc.username=root
  5. jdbc.password=123456
  6. #Mybatis
  7. mybatis_config_file=mybatis-config.xml
  8. mapper_path=/mapper/**.xml
  9. type_alias_package=cn.zyzpp.entity

6.配置SqlSessionFactoryBean

DataSourceBean

  1. import java.beans.PropertyVetoException;
  2. import org.mybatis.spring.annotation.MapperScan;
  3. import org.springframework.beans.factory.annotation.Value;
  4. import org.springframework.context.annotation.Bean;
  5. import org.springframework.context.annotation.Configuration;
  6. import com.mchange.v2.c3p0.ComboPooledDataSource;
  7. @Configuration
  8. //配置MyBatis mapper的扫描路径
  9. @MapperScan("cn.zyzpp.dao")
  10. public class DataSourceConfiguration {
  11. @Value("${jdbc.driverClass}")
  12. private String jdbcDriverClass;
  13. @Value("${jdbc.url}")
  14. private String jdbcUrl;
  15. @Value("${jdbc.username}")
  16. private String jdbcUser;
  17. @Value("${jdbc.password}")
  18. private String jdbcPassword;
  19. @Bean("dataSource")
  20. public ComboPooledDataSource createDataSource() throws PropertyVetoException{
  21. ComboPooledDataSource dataSource = new ComboPooledDataSource();
  22. dataSource.setDriverClass(jdbcDriverClass);
  23. dataSource.setJdbcUrl(jdbcUrl);
  24. dataSource.setUser(jdbcUser);
  25. dataSource.setPassword(jdbcPassword);
  26. //关闭连接后不自动commit
  27. dataSource.setAutoCommitOnClose(false);
  28. return dataSource;
  29. }
  30. }

SqlSessionFactoryBean

  1. import javax.sql.DataSource;
  2. import org.mybatis.spring.SqlSessionFactoryBean;
  3. import org.springframework.beans.factory.annotation.Autowired;
  4. import org.springframework.beans.factory.annotation.Qualifier;
  5. import org.springframework.beans.factory.annotation.Value;
  6. import org.springframework.context.annotation.Bean;
  7. import org.springframework.context.annotation.Configuration;
  8. import org.springframework.core.io.ClassPathResource;
  9. import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
  10. import org.springframework.core.io.support.ResourcePatternResolver;
  11. /**
  12. * Created by 巅峰小学生
  13. * 2018年3月11日 下午2:20:19
  14. */
  15. @Configuration
  16. public class SessionFactoryConfiguration {
  17. @Value("${mybatis_config_file}")
  18. private String mybatisConfigFile;
  19. @Value("${mapper_path}")
  20. private String mapperPath;
  21. // 实体类所在的package
  22. @Value("${type_alias_package}")
  23. private String typeAliasPackage;
  24. @Autowired
  25. @Qualifier("dataSource")
  26. private DataSource dataSource;
  27. @Bean("sqlSessionFactory")
  28. public SqlSessionFactoryBean creatSqlSessionFactoryBean() throws IOException{
  29. SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean();
  30. // 设置mybatis configuration 扫描路径
  31. sqlSessionFactoryBean.setConfigLocation(new ClassPathResource(mybatisConfigFile));
  32. // 添加mapper 扫描路径
  33. PathMatchingResourcePatternResolver pathMatchingResourcePatternResolver = new PathMatchingResourcePatternResolver();
  34. String packageSearchPath = ResourcePatternResolver.CLASSPATH_ALL_URL_PREFIX + mapperPath;
  35. sqlSessionFactoryBean.setMapperLocations(pathMatchingResourcePatternResolver.getResources(packageSearchPath));
  36. // 设置dataSource
  37. sqlSessionFactoryBean.setDataSource(dataSource);
  38. // 设置typeAlias 包扫描路径
  39. sqlSessionFactoryBean.setTypeAliasesPackage(typeAliasPackage);
  40. return sqlSessionFactoryBean;
  41. }
  42. }

7.开始使用

  1. @Service
  2. public class AreaServiceImpl implements AreaService {
  3. @Autowired
  4. private AreaDao areaDao;
  5. @Override
  6. public List<Area> getAreaList() {
  7. // 返回所有的区域信息
  8. return areaDao.queryArea();
  9. }
  10. @Override
  11. public Area getAreaById(int areaId) {
  12. return areaDao.queryAreaById(areaId);
  13. }
  14. ....

SpringBoot整合Mybatis使用注解或XML的方式开发的更多相关文章

  1. springboot整合mybatis时无法读取xml文件解决方法(必读)

    转    http://baijiahao.baidu.com/s?id=1588136004120071836&wfr=spider&for=pc 在springboot整合myba ...

  2. springboot整合mybatis之注解方式

    1. 创建maven项目,工程目录如下图 2. 在pom.xml文件中添加mybatis依赖. 3. 创建实体类,并生成construct方法,getter和setter方法.同时在数据库中创建对应的 ...

  3. spring 5.x 系列第5篇 —— 整合 mybatis + druid 连接池 (xml配置方式)

    源码Gitub地址:https://github.com/heibaiying/spring-samples-for-all 项目目录结构 1.创建maven工程,除了Spring基本依赖外,还需要导 ...

  4. SpringBoot整合Mybatis【非注解版】

    接上文:SpringBoot整合Mybatis[注解版] 一.项目创建 新建一个工程 ​ 选择Spring Initializr,配置JDK版本 ​ 输入项目名 ​ 选择构建web项目所需的state ...

  5. SpringBoot从入门到精通二(SpringBoot整合myBatis的两种方式)

    前言 通过上一章的学习,我们已经对SpringBoot有简单的入门,接下来我们深入学习一下SpringBoot,我们知道任何一个网站的数据大多数都是动态的,也就是说数据是从数据库提取出来的,而非静态数 ...

  6. SpringBoot整合Mybatis之xml

    SpringBoot整合Mybatis mybatis ORM框架.几个重要的概念: Mapper配置 : 可以使用基于XML的Mapper配置文件来实现,也可以使用基于Java注解的Mybatis注 ...

  7. SpringBoot 整合 Mybatis + Mysql——XML配置方式

    一.介绍 SpringBoot有两种方法与数据库建立连接,一种是集成Mybatis,另一种用JdbcTemplate,本文主要讨论集成Mybatis方式. SpringBoot整合Mybatis也有两 ...

  8. SpringBoot整合Mybatis多数据源 (AOP+注解)

    SpringBoot整合Mybatis多数据源 (AOP+注解) 1.pom.xml文件(开发用的JDK 10) <?xml version="1.0" encoding=& ...

  9. springboot整合mybatis(注解)

    springboot整合mybatis(注解) 1.pom.xml: <?xml version="1.0" encoding="UTF-8"?> ...

随机推荐

  1. sdk manager闪退

    ,1确认好sdk环境变量是否都正确 命令行:android 来验证 2确定jdk是否安装正确 命令行:java   和  javac 都没有问题,就将sdk安装版覆盖安装下不要卸载,不然下载的太慢了 ...

  2. 深入理解Java虚拟机01--概述

    本课题是对<深入理解Java虚拟机>周志明 第二版的总结   具体可以参考:https://pan.baidu.com/s/1v_mPp--XV4u4rCBMkbR37A 第1版 可以忽略 ...

  3. <1>Python生成高质量Html文件:Pyh模块+Bootstrap框架

    一,介绍 QQ交流群:585499566 本文的目的是怎么使用Pyh+Bootstrap快速生成简约,大方,清新的Html页面,涉及到的技能:Python小白技能,Pyh会阅读中文文档,Html基础, ...

  4. perfect-scrollbar在vue中的使用

    1.下载perfect-scrollbar依赖包 npm install perfect-scrollbar 2.perfect-scrollbar特性 1)直接下载依赖包及包含css样式和js 2) ...

  5. 洗礼灵魂,修炼python(73)--全栈项目实战篇(1)——【转载】前提准备之学习ubuntu

    本篇是为项目实战做准备,学习Linux是必备的,不然都不好意思叫全栈对吧?下面是一位资深大神写的文章,够详细,我也不用浪费时间再写了 原文链接:Ubuntu学习——第一篇 内容: 一. Ubuntu简 ...

  6. 洗礼灵魂,修炼python(65)--爬虫篇—BeautifulSoup:“忘掉正则表达式吧,我拉车养你”

    前面解析了正则表达式,其实内容还挺多的对吧?确实挺适用的,不仅是python,其他语言或者web前端后端基本都要掌握正则表达式知识,但是你说,这么多,要完全的掌握,灵活运用的话,得搞多久啊?并且如果一 ...

  7. 自动获取svn的版本号

    需求 在做打包时,需要获取本地svn仓库的版本号,如下所示: 下面是我试过的几种做法 SubWCRev 使用SubWCRev.exe(TortoiseSVN自带的小工具),用法简单,但获取到的版本号有 ...

  8. C语言 投票系统:给定候选人,从键盘输入候选人的名字,统计票数,并输出最终获胜者

    投票系统:给定候选人名单,从键盘输入候选人的名字,统计票数,并输出最终获胜者.若投票人输入的名字不在其候选名单上,则该票数无效. //凯鲁嘎吉 - 博客园 http://www.cnblogs.com ...

  9. python 线程队列、线程池、全局解释器锁GIL

    一.线程队列 队列特性:取一个值少一个,只能取一次,没有值的时候会阻塞,队列满了,也会阻塞 queue队列 :使用import queue,用法与进程Queue一样 queue is especial ...

  10. flex布局大讲解

    http://www.ruanyifeng.com/blog/2015/07/flex-grammar.html?utm_source=tuicool