SpringBoot初学(4)– JdbcTemplate和Mybatis

摘要:
org.springframework.bootspring-boot-starter-jdbcapplication.properties:####28.1.2.连接到一个生产环境数据库##注:其他的连接池可以手动配置。如果你定义自己的DataSourcebean,自动配置不会发生。######SpringBoot能够从大多数数据库的url上推断出driver-class-name,那么你就不需要再指定它了。spring.datasource.driver-class-name=oracle.jdbc.driver.OracleDriver##默认会从url推断driverclassspring.datasource.url=jdbc:oracle:thin:@127.0.0.1:1521:orclspring.datasource.username=vergilynspring.datasource.password=409839163##JDNI#spring.datasource.jndi-name=java:jboss/datasources/customers/*Spring的JdbcTemplate和NamedParameterJdbcTemplate类是被自动配置的,*你可以在自己的beans中通过@Autowire直接注入它们。*/@RepositorypublicclassJdbcTemplateDao{@AutowiredprivateJdbcTemplatejdbcTemplate;@AutowiredprivateNamedParameterJdbcTemplatenamedJdbc;@SuppressWarningspublicLongtestDao(){Mapparam=newHashMap();Stringsql="selectcount(*)fromchild";if{sql+="wherechild_name=:name";param.put;}Longcount=this.namedJdbc.queryForObject;System.out.println;returncount;}}@SpringBootApplication@RestControllerpublicclassDatabaseApplication{@AutowiredprivateJdbcTemplateDaodao;publicstaticvoidmain{SpringApplication.run;}@RequestMappingpublicStringtestDao(){returndao.testDao()+"";}}二、Springboot集成Mybatis2.1准备org.mybatis.spring.bootmybatis-spring-boot-starter1.2.02.2xml模式的mybatis配置mybatis的sql映射xml,mybatis-config.xml:application.properties中对应要指明此映射路径。application.properties:##spring.datasource.schema=classpath:config/mybatis/init-oracle.sqlmybatis.config-location=classpath:config/mybatis/mybatis-config.xmlmybatis的mapper定义:˂?

前言

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

代码位置:

image

一、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定义:

SpringBoot初学(4)– JdbcTemplate和Mybatis第2张SpringBoot初学(4)– JdbcTemplate和Mybatis第3张
<?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
SpringBoot初学(4)– JdbcTemplate和Mybatis第2张SpringBoot初学(4)– JdbcTemplate和Mybatis第5张
<?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定义:

SpringBoot初学(4)– JdbcTemplate和Mybatis第2张SpringBoot初学(4)– JdbcTemplate和Mybatis第7张
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
SpringBoot初学(4)– JdbcTemplate和Mybatis第2张SpringBoot初学(4)– JdbcTemplate和Mybatis第9张
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》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇PHP curl请求封装用dispatch_semaphore_t解决block异步执行返回结果问题下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

JDBC工具类完整版!

package com.aaa.util; import java.sql.*; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; /** * JDBC工具类? * 一、增...

Spring Boot源码分析-配置文件加载原理

在Spring Boot源码分析-启动过程中我们进行了启动源码的分析,大致了解了整个Spring Boot的启动过程,具体细节这里不再赘述,感兴趣的同学可以自行阅读。今天让我们继续阅读源码,了解配置文件加载原理。 基于Spring Boot 2.1.0.RELEASE 在开始阅读源码之前,首先准备三个问题。 什么时候开始加载配置文件? 如何读取相关配置文...

两个springboot项目如何部署在同一个服务上,两个spring启动应用程序部署在同一台服务器上

现在有两个spring boot的maven项目,需要部署到同一个外部的服务上(tomcat),他们都包含spring-boot-starter-actuator(健康检查)的依赖,但是出现下面的异常 我有多个spring引导应用程序(maven项目),其中包含“spring-boot-starter-actuator”依赖项,用于检查每个应用程序的运行状...

菜鸟学JDBC(二)

  上一篇文章( http://blog.csdn.net/rowandjj/article/details/8883383)我们了解了如何通过JDBC连接mysql数据库,并通过一个简单的代码示例演示了具体的操作,这里简单回顾一下流程: 1.装载驱动(Class.forName()....); 2.通过DriverManager类与数据库建立连接(Con...

mybatis基础流程_真正开始执行查询

mybatis基础流程_真正开始执行查询 拿查询来看Mybatis执行的源码流程 a . 比如selectOne方法, 其实底层还是会调用selectList()方法. a . 虽然会调用SelectList ,但是会确定结果集是否为1个,不是的话会抛出异常. a . 可以看到与前几章不同的是,之前都是 this.configuration.setM...

使用IDEA工具整合mybatis时使用@Resource和@Autowired自动注解bean时会显示红色问题的解决办法

使用IDEA工具整合mybatis时使用@Resource和@Autowired自动注解bean时会显示红色问题的解决办法 idea中springboot整合mybatis时,通过@Autowired注入的对象一直有下划线提示,但是项目能运行,虽然不影响运行,但是强迫症的程序员肯定看不下去. 如何去除呢?解决:改变@Autowired的检查级别即可.快捷键...