前言

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. [信息安全] 05 X.509 公钥证书的格式标准

    X.509是# 公钥证书的格式标准, 广泛用于TLS/SSL安全通信或者其他需要认证的环境中.X.509证书可以由# CA颁发,也可以自签名产生. 1 Overview {#1-overview} X ...

  2. 第3章 JDK并发包(二)

    3.1.2 重入锁的好搭档:Condition条件 它和wait()和notify()方法的作用是大致相同的.但是wait()和notify()方法是和synchronized关键字合作使用的,而Co ...

  3. qt creator源码全方面分析(2-3)

    目录 External Tool Specification Files 文件名 位置 文件格式 主要标签 描述标签 可执行规范标签 示例 External Tool Specification Fi ...

  4. php 安装扩展插件实例-ftp.so

    工作记录一下   1.首先进入原始php包安装文件(不是安装后的文件,是下载php安装压缩包,解压后的那个文件)安装包里有个扩展文件夹ext,进入 #cd /home/php-5.3.3/ext/#l ...

  5. iptables之路由网关共享上网/端口映射

    linux-A 主机配置eth0即可: [root@linux-A ~]# ifconfig eth0|sed -n '2p' inet addr:192.168.20.3 Bcast:192.168 ...

  6. 高并发之——深入解析Callable接口

    本文纯干货,从源码角度深入解析Callable接口,希望大家踏下心来,打开你的IDE,跟着文章看源码,相信你一定收获不小. 1.Callable接口介绍 Callable接口是JDK1.5新增的泛型接 ...

  7. 修改kali软件源并配置网络

    一.配置kali使用xshell连接 查看ssh服务状态 # service ssh status 开启ssh服务 # service ssh start 修改ssh配置文件 # vi /etc/ss ...

  8. 3,HDFS原理

    1,HDFS体系结构 ··· HDFS是采用master/slaves即主从结构模型来管理数据的.这种模型主要由四部分组成,分别是Client.NameNode.DataNode.SecondaryN ...

  9. Hibernate入门之创建数据库表

    前言 Hibernate 5.1和更早版本至少需要Java 1.6和JDBC 4.0,Hibernate 5.2和更高版本至少需要Java 1.8和JDBC 4.2,从本节开始我们正式进入Hibern ...

  10. 10分钟快速搭建可用的springboot-web项目

    搭建步骤 工具准备 1. IntelliJ IDEA(开发工具,简称idea) 2. JDK1.8+ 3. MAVEN 4. mysql(数据库) 5. redis(session储存) 创建步骤 S ...