前言

github: https://github.com/vergilyn/SpringBootDemo

代码位置:

一、Spring Boot集成JdbcTemplate或NamedParameterJdbcTemplate

spring boot中JdbcTemplate与NamedParameterJdbcTemplate都是被自动配置的,所以只要注入就可用。(在传统的spring中NamedParameterJdbcTemplate并没有被自动配置)

必须准备:

如果你使用spring-boot-starter-jdbc或spring-boot-starter-data-jpa 'starter POMs',你将会自动获取对tomcat-jdbc的依赖。

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>

application.properties:

#### 28.1.2. 连接到一个生产环境数据库
## 注:其他的连接池可以手动配置。如果你定义自己的DataSource bean,自动配置不会发生。
#### ## Spring Boot能够从大多数数据库的url上推断出driver-class-name,那么你就不需要再指定它了。
spring.datasource.driver-class-name=oracle.jdbc.driver.OracleDriver
## 默认会从url推断driver class
spring.datasource.url=jdbc:oracle:thin:@127.0.0.1:1521:orcl
spring.datasource.username=vergilyn
spring.datasource.password=409839163 ## JDNI
# spring.datasource.jndi-name=java:jboss/datasources/customers
/* Spring的JdbcTemplate和NamedParameterJdbcTemplate类是被自动配置的,
* 你可以在自己的beans中通过@Autowire直接注入它们。
*/
@Repository
public class JdbcTemplateDao {
@Autowired
private JdbcTemplate jdbcTemplate; @Autowired
private NamedParameterJdbcTemplate namedJdbc; @SuppressWarnings("unused")
public Long testDao(){
Map<String,Object> param = new HashMap<String,Object>();
String sql = " select count(*) from child";
if(true){
sql += " where child_name = :name ";
param.put("name", "周一");
}
Long count = this.namedJdbc.queryForObject(sql, param, Long.class);
System.out.println(count);
return count;
}
}
@SpringBootApplication
@RestController
public class DatabaseApplication {
@Autowired
private JdbcTemplateDao dao;
public static void main(String[] args) {
SpringApplication.run(DatabaseApplication.class, args);
}
@RequestMapping("/jdbc")
public String testDao(){
return dao.testDao()+"";
}
}

二、Spring boot集成Mybatis

2.1 准备
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>1.2.0</version>
</dependency>
2.2 xml模式的mybatis配置

mybatis的sql映射xml, mybatis-config.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>
<typeAliases>
<package name="com.vergilyn.demo.springboot.mybatis.domain"/>
</typeAliases>
<mappers>
<mapper resource="config/mybatis/mapper/CityMapper.xml"/>
<mapper resource="config/mybatis/mapper/HotelMapper.xml"/>
</mappers>
</configuration>

application.properties中对应要指明此映射路径。

application.properties:

## spring.datasource.schema=classpath:config/mybatis/init-oracle.sql
mybatis.config-location=classpath:config/mybatis/mybatis-config.xml

mybatis的mapper定义:

<?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.vergilyn.demo.springboot.mybatis.mapper.HotelMapper">
<select id="selectByCityId" resultType="Hotel">
select * from hotel where city = #{id}
</select>
</mapper>

HotelMapper.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.vergilyn.demo.springboot.mybatis.mapper.CityMapper">
<select id="selectCityById" resultType="City">
select * from city where id = #{id}
</select>
</mapper>

CityMapper.xml

mybatis的domain定义:

public class City implements Serializable {

	private static final long serialVersionUID = 1L;

	private Long id;

	private String name;

	private String state;

	private String country;

	public Long getId() {
return this.id;
} public void setId(Long id) {
this.id = id;
} public String getName() {
return this.name;
} public void setName(String name) {
this.name = name;
} public String getState() {
return this.state;
} public void setState(String state) {
this.state = state;
} public String getCountry() {
return this.country;
} public void setCountry(String country) {
this.country = country;
} @Override
public String toString() {
return getId() + "," + getName() + "," + getState() + "," + getCountry();
} }

City.java

public class Hotel implements Serializable {

	private static final long serialVersionUID = 1L;

	private Long city;

	private String name;

	private String address;

	private String zip;

	public Long getCity() {
return city;
} public void setCity(Long city) {
this.city = city;
} public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} public String getAddress() {
return address;
} public void setAddress(String address) {
this.address = address;
} public String getZip() {
return zip;
} public void setZip(String zip) {
this.zip = zip;
} @Override
public String toString() {
return getCity() + "," + getName() + "," + getAddress() + "," + getZip();
} }

Hotel.java

mybatis的dao定义,mybatis的SqlSession可直接注入:

@Component
public class CityDao {
@Autowired
private SqlSession sqlSession; public City selectCityById(long id) {
return this.sqlSession.selectOne("selectCityById", id);
} }

测试代码:

@SpringBootApplication
public class MybatisApplication implements CommandLineRunner { public static void main(String[] args) {
SpringApplication app = new SpringApplication(MybatisApplication.class);
app.setAdditionalProfiles("mybatis");
app.run(args);
}
@Autowired
private CityDao cityDao; @Override
public void run(String... args) throws Exception {
System.out.println(this.cityDao.selectCityById(1));
} }
2.3 mybatis注解形式

相对于xml形式,使用注解模式可减少很多xml的定义。例如:无需定义映射sql的mybatis-config.xml,*Mapper.xml中的sql也可以用注解写java文件中,application.properties中无需配置任何指定。

但,个人偏向于还是在xml中写sql。

注解形式的domain与xml形式的是一样的,jar的引用也是一样的。

注解形式的*Mapper.java定义,主要是注解org.apache.ibatis.annotations.Mapper:

@Mapper
public interface CityMapper {
// 混用xml形式
City selectByCityId(int city_id); /**
* 注解形式不需要通过dao调用*Mapper.xml。所以可以不写dao、*Mapper.xml、mybatis-config.xml
* @param i
* @return
*/
@Select("select * from city where id = #{id}")
City selectByAnnotation(int i);
}
@Mapper
public interface HotelMapper { Hotel selectByHotelId(int city_id); }

以上可能并不是混用xml,反正要用xml,那么相应的application.properties中就需要指明mybatis-config.xml。 

(一篇不错的介绍mybatis中Mapper的文章: Mybatis中配置Mapper的方法 )

测试代码:

@SpringBootApplication
public class MybatisApplication implements CommandLineRunner { public static void main(String[] args) {
SpringApplication app = new SpringApplication(MybatisApplication.class);
app.setAdditionalProfiles("mybatis");
app.run(args);
}
@Autowired
private CityDao cityDao;
@Autowired
private HotelMapper hotelMapper;
@Autowired
private CityMapper cityMapper; @Override
public void run(String... args) throws Exception {
System.out.println(this.cityDao.selectCityById(1));
System.out.println(this.cityMapper.selectByAnnotation(1));
System.out.println(this.hotelMapper.selectByHotelId(1));
} }

三、题外话

到现在,主要用过的有hibernate、mybatis、JdbcTemplate。个人最喜欢的还是mybatis, 简单一句话相对hibernate而言,纯sql的可控性高太多。

另外,spring boot学到现在,发现其简化的spring配置不是一点两点那么简单。就像用注解形式的mybatis,spring boot中都可以不需要任何手动配置,因为在mybatis.jar中有一套自动配置。

那么就完全省去了配置的麻烦(虽然实际开发中这并不关一个初中级开发的事。)

然后剩下的只是mybatis要怎么用?@Mapper有哪些作用?这些都无关繁琐的配置,而是实际开发要用到的。

SpringBoot初学(4)– JdbcTemplate和Mybatis的更多相关文章

  1. JdbcTemplate 、Mybatis、ORM 、Druid 、HikariCP 、Hibernate是什么?它们有什么关系?

    JdbcTemplate .Mybatis.ORM .Druid .HikariCP .Hibernate是什么?它们有什么关系? 学完Spring和SpringMVC之后,就急于求成的开始学习起Sp ...

  2. Springboot 2.0.4 整合Mybatis出现异常Property 'sqlSessionFactory' or 'sqlSessionTemplate' are required

    在使用Springboot 2.0.4 整合Mybatis的时候出现异常Property 'sqlSessionFactory' or 'sqlSessionTemplate' are require ...

  3. 【Spring】事务(transactional) - REQUIRES_NEW在JdbcTemplate、Mybatis中的不同表现

    环境 数据库: oracle 11g JAR: org.springframework:spring-jdbc:4.3.8.RELEASE org.mybatis:mybatis:3.4.2 概念 R ...

  4. 【spring boot】SpringBoot初学(2.1) - properties读取明细

    前言 算是对<SpringBoot初学(2) - properties配置和读取>的总结吧. 概念性总结 一.Spring Boot允许外化(externalize)你的配置.可以使用pr ...

  5. JAVA - SpringBoot项目引用generator生成 Mybatis文件

    JAVA - SpringBoot项目引用generator生成 Mybatis文件  在spring官网https://start.spring.io/自动生成springboot项目,这里选择项目 ...

  6. SpringBoot系列(五)Mybatis整合完整详细版

    SpringBoot系列(五)Mybatis整合 目录 mybatis简介 项目创建 entity dao service serviceImpl mapper controller 1. Mybat ...

  7. SpringBoot数据访问之整合mybatis注解版

    SpringBoot数据访问之整合mybatis注解版 mybatis注解版: 贴心链接:Github 在网页下方,找到快速开始文档 上述链接方便读者查找. 通过快速开始文档,搭建环境: 创建数据库: ...

  8. (入门SpringBoot)SpringBoot项目数据源以及整合mybatis(二)

    1.配置tomcat数据源: #   数据源基本配置spring.datasource.url=jdbc:mysql://localhost:3306/shoptest?useUnicode=true ...

  9. 【spring boot】SpringBoot初学(7)– 多数据源及其事务

    前言 github: https://github.com/vergilyn/SpringBootDemo 代码位置: 参考: Spring Boot Reference Guide , §77.2 ...

随机推荐

  1. BZOJ 1025 [SCOI2009]游戏 (DP+分解质因子)

    题意: 若$a_1+a_2+\cdots+a_h=n$(任意h<=n),求$lcm(a_i)$的种类数 思路: 设$lcm(a_i)=x$, 由唯一分解定理,$x=p_1^{m_1}+p_2^{ ...

  2. EMC NW disaster and recovery simulation 1

    终于可以模拟成功了虽然只是个实验但是很有借鉴意义. 前期的准备就不说了都懂直接上图吧 scanner -B networker_indexclone to find out the laster bo ...

  3. oracle安装异常汇总

    . 运行 ./runInstaller 安装界面出现乱码问题 解决方案: export NLS_LANG=AMERICAN_AMERICA.UTF8 export LC_ALL=C .运行 ./run ...

  4. vue子向父传值

    要弄懂子组件如何向父组件传值,需要理清步骤 子组件向父组件传值的步骤 一:子组件在组件标签上通过绑定事件的方式向父组件发射数据 <!--html--><template id=&qu ...

  5. TomCat控制台中文乱码及IDEA设置为UTF-8

    一.解决IDEA中的中文乱码 1.首先设置idea编辑器的编码: File-Setting设置如下 idea显示编码:windows默认用gbk所以idea显示默认为gbk编码,在 Help--Edi ...

  6. Linux设备中的UUID

    UUID简介 UUID为系统中的存储设备提供唯一的标识字符串,不管这个设备是什么类型的.如果你在系统中启动的时候,使用盘符挂载时,可能找不到设备而加载失败,而使用UUID挂载时,则不会有这样的问题.( ...

  7. el-menu 菜单展示

    <template> <div class="tab-container"> <el-menu class="el-menu-vertica ...

  8. python随用随学20200220-异步IO

    啥是异步IO 众所周知,CPU速度太快,磁盘,网络等IO跟不上. 而程序一旦遇到IO的时候,就需要等IO完成才能进行才能进行下一步的操作. 严重拖累了程序速度. 因为一个IO操作就阻塞了当前线程,导致 ...

  9. http各个版本(1/1.1/2)对比

    参考的文章: 从理论到实践 全面理解HTTP/2 HTTP协议以及HTTP2.0/1.1/1.0区别 综合阐述http1.0/1.1/2和https 目录: http1.1 长连接 HTTP 1.1支 ...

  10. SQL查询结果自定义排序

    一般情况之下,我们可以使用ORDER BY ...ASC或DESC来做查询排序.如: SELECT * FROM [dbo].[SalesPerformance] ORDER BY [Salesman ...