Spring Boot基礎教程13-使用SQL關係型數據庫-JdbcTemplate

 

 

一、 配置數據源:

嵌入式數據庫的支持:Spring Boot 可以自動配置H2, HSQL and Derby 數據庫,不需要提供任何的鏈接URLs,只需要加入相應的jar包,Spring boot可以自動發現裝配

<!-- 數據庫 --> 

<dependency> 

<groupId>org.springframework.boot</groupId> 

<artifactId>spring-boot-starter-jdbc</artifactId> 

</dependency> 

<dependency> 

<groupId>mysql</groupId> 

<artifactId>mysql-connector-java</artifactId> 

<scope>runtime</scope> 

</dependency> 

mysql

spring.datasource.url=jdbc:mysql://localhost/spring_boot_demo?useUnicode=true&characterEncoding=utf-8

spring.datasource.username=root

spring.datasource.password=123456

spring.datasource.driver-class-name=com.mysql.jdbc.Driver

注:

1.可以不指定driver-class-name,spring boot會自動識別url。

2.數據連接池默認使用tomcat-jdbc

連接池的配置:spring.datasource.tomcat.*

二、 JdbcTemplate模板

 

// 自動註冊

@Autowired

private JdbcTemplate jdbcTemplate;

三、 腳本

 

CREATE TABLE `roncoo_user` (

`id` int(11) NOT NULL AUTO_INCREMENT,

`name` varchar(255) DEFAULT NULL,

`create_time` datetime DEFAULT NULL,

PRIMARY KEY (`id`)

) ENGINE=InnoDB AUTO_INCREMENT=1DEFAULT CHARSET=utf8 COMMENT='用戶表';

 

四、實體類

/**

* 實體類

* @author wujing

*/

public class RoncooUser {

private int id;

private String name;

private Date createTime;

public int getId() {

return id;

}

public void setId(int id) {

this.id = id;

}

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

public Date getCreateTime() {

return createTime;

}

public void setCreateTime(Date createTime) {

this.createTime = createTime;

}

@Override

public String toString() {

return "RoncooUser [id=" + id + ", name=" + name + ", createTime=" + createTime + "]";

}

}

五、 接口

 

 

int insert(RoncooUser roncooUser);

int deleteById(int id);

int updateById(RoncooUser roncooUser);

RoncooUser selectById(int id);

六、實現類代碼

@Autowired

private JdbcTemplate jdbcTemplate;

@Override

public int insert(RoncooUser roncooUser) {

String sql = "insert into roncoo_user (name, create_time) values (?, ?)";

return jdbcTemplate.update(sql, roncooUser.getName(), roncooUser.getCreateTime());

}

@Override

public int deleteById(int id) {

String sql = "delete from roncoo_user where id=?";

return jdbcTemplate.update(sql, id);

}

@Override

public int updateById(RoncooUser roncooUser) {

String sql = "update roncoo_user set name=?, create_time=? where id=?";

return jdbcTemplate.update(sql, roncooUser.getName(), roncooUser.getCreateTime(), roncooUser.getId());

}

@Override

public RoncooUser selectById(int id) {

String sql = "select * from roncoo_user where id=?";

return jdbcTemplate.queryForObject(sql, new RowMapper<RoncooUser>() {

@Override

public RoncooUser mapRow(ResultSet rs, int rowNum) throws SQLException {

RoncooUser roncooUser = new RoncooUser();

roncooUser.setId(rs.getInt("id"));

roncooUser.setName(rs.getString("name"));

roncooUser.setCreateTime(rs.getDate("create_time"));

return roncooUser;

}

}, id);

}

七、測試類代碼

@Autowired

private RoncooUserDao roncooUserDao;

@Test

public void insert() {

RoncooUser roncooUser = new RoncooUser();

roncooUser.setName("測試");

roncooUser.setCreateTime(new Date());

int result = roncooUserDao.insert(roncooUser);

System.out.println(result);

}

@Test

public void delete() {

int result = roncooUserDao.deleteById(1);

System.out.println(result);

}

@Test

public void update() {

RoncooUser roncooUser = new RoncooUser();

roncooUser.setId(2);

roncooUser.setName("測試2");

roncooUser.setCreateTime(new Date());

int result = roncooUserDao.updateById(roncooUser);

System.out.println(result);

}

@Test

public void select() {

RoncooUser result = roncooUserDao.selectById(2);

System.out.println(result);

}

打印sql語句,添加如下

<logger name="org.springframework.jdbc.core.JdbcTemplate" level="debug"/>

八、封裝spring jdbc,帶分頁Spring Boot 基礎教程 作者:馮永偉 

5 龍果學院:http://www.roncoo.com 

 

/**

* 獲取當前事務最後一次更新的主鍵值

*/

public Long getLastId() {

return jdbcTemplate.queryForObject("select last_insert_id() as id", Long.class);

}

/**

* 獲取對象信息

*/

public <T> T queryForObject(String sql, Class<T> clazz, Object... args) {

Assert.hasText(sql, "sql 語句不能爲空");

return jdbcTemplate.queryForObject(sql, new BeanPropertyRowMapper<T>(clazz), args);

}

/**

* 獲取對象集合信息

*/

public <T> List<T> queryForObjectList(String sql, Class<T> clazz, Object... args) {

Assert.hasText(sql, "sql 語句不能爲空");

return jdbcTemplate.query(sql, args, new BeanPropertyRowMapper<T>(clazz));

}

/**

* 分頁,jdbcTemplate 不支持like自定義,只能拼裝

*/

public Page<Map<String, Object>> queryForPage(String sql, int pageCurrent, int pageSize, Object... args) {

Assert.hasText(sql, "sql 語句不能爲空");

Assert.isTrue(pageCurrent >= 1, "pageNo 必須大於等於1");

String sqlCount = Sql.countSql(sql);

int count = jdbcTemplate.queryForObject(sqlCount, Integer.class, args);

pageCurrent = Sql.checkPageCurrent(count, pageSize, pageCurrent);

pageSize = Sql.checkPageSize(pageSize);

int totalPage = Sql.countTotalPage(count, pageSize);

String sqlList = sql + Sql.limitSql(count, pageCurrent, pageSize);

List<Map<String, Object>> list = jdbcTemplate.queryForList(sqlList, args);

return new Page<Map<String, Object>>(count, totalPage, pageCurrent, pageSize, list);

}

/**

* 分頁,jdbcTemplate 不支持like是定義,只能拼裝

*

 

public <T> Page<T> queryForPage(String sql, int pageCurrent, int pageSize, Class<T> clazz, Object... args) {

Assert.hasText(sql, "sql 語句不能爲空");

Assert.isTrue(pageCurrent >= 1, "pageNo 必須大於等於1");

Assert.isTrue(clazz != null, "clazz 不能爲空");

String sqlCount = Sql.countSql(sql);

int count = jdbcTemplate.queryForObject(sqlCount, Integer.class, args);

pageCurrent = Sql.checkPageCurrent(count, pageSize, pageCurrent);

pageSize = Sql.checkPageSize(pageSize);

int totalPage = Sql.countTotalPage(count, pageSize);

String sqlList = sql + Sql.limitSql(count, pageCurrent, pageSize);

List<T> list = jdbcTemplate.query(sqlList, new BeanPropertyRowMapper<T>(clazz), args);

return new Page<T>(count, totalPage, pageCurrent, pageSize, list);

}

測試

@Test 

public void select2() { 

RoncooUser result = roncooUserDao.selectById(7); 

System.out.println(result); 

// 分頁測試 

@Test 

public void queryForPage(){ 

Page<RoncooUser> result = roncooUserDao.queryForPage(1, 20, "測試"); 

System.out.println(result.getList()); 

實現類 

@Override 

public Page<RoncooUser> queryForPage(int pageCurrent, int pageSize, String name){ 

// 確定參數 

/*String sql = "select * from roncoo_user where name=?"; 

return queryForPage(sql.toString(), pageCurrent, pageSize, RoncooUser.class, name);*/ 

// 若name可能爲空,則要進行判定,如下 

/*StringBuffer sql = new StringBuffer("select * from roncoo_user where 1"); Spring Boot 基礎教程 作者:馮永偉 

7 龍果學院:http://www.roncoo.com 

 

if(!StringUtils.isNullOrEmpty(name)){ 

// Sql.checkSql 的作用是防止sql注入 

sql.append(" and name = '").append(Sql.checkSql(name)).append("' "); 

return queryForPage(sql.toString(), pageCurrent, pageSize, RoncooUser.class);*/ 

// 若要like查詢,如下 

StringBuffer sql = new StringBuffer("select * from roncoo_user where 1"); 

if(!StringUtils.isNullOrEmpty(name)){ 

// Sql.checkSql 的作用是防止sql注入 

sql.append(" and name like '%").append(Sql.checkSql(name)).append("%' "); 

return queryForPage(sql.toString(), pageCurrent, pageSize, RoncooUser.class); 

} } 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章