1. 介绍
1.1 介绍
今天开始我们来学习Java操作MySQL数据库的技巧,Java操作MySQL是借助JdbcTemplate这个对象来实现的。JdbcTemplate是一个多数据库集中解决方案,而我们今天只讲如何通过JdbcTemplate操作MySQL数据库。
Java的生态非常成熟,基本上是无框架不项目,无论做任何功能都一定会基于一个框架来开发。福哥选择的就是非常大众的非常普及的SpringBoot框架,今天的教程也是基于这个SpringBoot框架的。因为今天的主题是使用JdbcTemplate操作MySQL数据库,所以还不熟悉SpringBoot框架的童鞋们请自行恶补一下,福哥前面的文章也有介绍SpringBoot框架的,大家可以找来学习。
2. 安装
2.1 配置
在application.properties里面设置jdbc连接mysql的配置参数。
sql.mysql.jdbc-url=jdbc:mysql://192.168.2.168:3306/test?characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&tinyInt1isBit=false&serverTimezone=UTC&autoReconnect=true&useSSL=false
sql.mysql.username=root
sql.mysql.password=abcdef
sql.mysql.driverClassName=com.mysql.cj.jdbc.Driver
2.2 依赖
在pom.xml里面添加jdbc的库包,这里面包括jdbc库包和mysql连接器库包。
<!-- mysql -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.17</version>
</dependency>
<!-- jdbc -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jdbc</artifactId>
<version>2.1.7.RELEASE</version>
</dependency>
3. 连接
连接MySQL需要知道服务器的地址、用户名、密码,先通过服务器地址、用户名、密码创建一个数据源,再将数据源传递给JdbcTemplate对象,这样就可以通过JdbcTemplate对象操作MySQL数据库了。
3.1 手动配置
我们可以选择手动配置数据源,这种方式需要自己传入服务器地址、用户名、密码参数,虽然不好维护,但是很直观。
DriverManagerDataSource dataSource = new DriverManagerDataSource();
dataSource.setDriverClassName("com.mysql.cj.jdbc.Driver");
dataSource.setUrl("jdbc:mysql://192.168.2.168:3306/test");
dataSource.setUsername("root");
dataSource.setPassword("abcdef");
JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
3.2 自动配置
既然使用了SpringBoot框架了还要自己配置数据源有点搞笑了,所以福哥还是推荐使用自动配置方式创建数据源。
3.2.1 配置对象
使用SpringBoot框架自动配置数据源需要建立自动配置对象,然后SpringBoot会自动将配置参数注入到配置对象里完成数据源自动配置。
@Configuration
public class ConfigMySQL {
@Bean(name = "ConfigMySQL_DS")
@Qualifier("ConfigMySQL_DS")
@ConfigurationProperties(prefix = "sql.mysql")
public DataSource getDS(){
DataSource dataSource = DataSourceBuilder.create().build();
return dataSource;
}
@Bean(name = "ConfigMySQL_JT")
@Qualifier("ConfigMySQL_JT")
public JdbcTemplate getJT(
@Qualifier("ConfigMySQL_DS") DataSource dataSource
){
JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
return jdbcTemplate;
}
}
3.2.2 对象注入
有了配置对象了,在项目启动后SpringBoot就会自动帮助我们配置好数据源了,接下来就只需要在控制器里注入就可以使用了。
@Autowired
@Qualifier("ConfigMySQL_JT")
JdbcTemplate jdbcTemplate;
4. 数据库列表
JdbcTemplate没有单独的方法用来获取数据库列表,福哥是通过执行“show databases”语句获取数据库列表信息的。这是一个最简单的查询语句的示例,大家看好了。
List<Map<String, Object>> map = jdbcTemplate.queryForList("show databases");
5. 数据表列表
同样的JdbcTemplate也没有用来获取数据表列表的方法,福哥是通过执行“show tables”语句获取当前数据库的数据表列表的。
当前数据库是在配置Jdbc数据源的时候通过jdbc-url配置的,所以福哥改了一下配置文件的jdbc-url参数,将数据库设置成tfums库了。
5.1 配置
sql.mysql.jdbc-url=jdbc:mysql://192.168.2.168:3306/tfums?characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&tinyInt1isBit=false&serverTimezone=UTC&autoReconnect=true&useSSL=false
sql.mysql.username=root
sql.mysql.password=abcdef
sql.mysql.driverClassName=com.mysql.cj.jdbc.Driver
5.2 程序
List<Map<String, Object>> map = jdbcTemplate.queryForList("show tables");
6. 插入数据
6.1 插入数据
插入数据是通过JdbcTemplate的update方法执行一个SQL语句完成的,如果SQL语句有参数可以通过“?”替代,然后通过一个Object数组传递参数。因为Java是强类型语言,传递SQL参数相比较PHP就舒服多了,因为我们不需要指定参数的类型,JdbcTemplate会帮我们搞定。
插入数据是否成功就看有没有异常抛出就可以了,没插入成功一定会有原因的嘛~~
try {
String sql = "insert into user (passwd, createDT, userFlag, userState, userName)" +
" values (?, now(), ?, ?, ?)";
Object[] values = new Object[]{"123456", 7, 1, "福哥教JdbcTemplate"};
Integer ret = jdbcTemplate.update(sql, values);
return ret.toString();
}
catch (Exception e){
return e.getMessage();
}
第一次执行的时候不会报错,多次执行就会有下面的错误信息了!
6.2 获取自增列数值
刚刚福哥向用户表user插入了一条数据,用户表user的主键是自增列,要获取新数据的自增列的数值需要自己通过SQL获得。
try {
String sql = "insert into user (passwd, createDT, userFlag, userState, userName)" +
" values (?, now(), ?, ?, ?)";
Object[] values = new Object[]{"123456", 7, 1, "福哥教JdbcTemplate"};
Integer ret = jdbcTemplate.update(sql, values);
Map map = jdbcTemplate.queryForMap("select LAST_INSERT_ID() as newId");
return map.get("newId").toString();
}
catch (Exception e){
return e.getMessage();
}
7. 更新数据
更新数据就是执行UPDATE语句了,更新语句的条件自然就是通过刚刚获取到的自增列的数值了。更新是否成功也是看是否有异常抛出,如果没有抛出就是执行成功了!
我们还可以通过update方法的返回值获得本次更新语句影响了多少行的数据!
try {
String sql = "update user set lastLoginDT = now()" +
" where userID = ?";
Object[] values = new Object[]{16};
Integer ret = jdbcTemplate.update(sql, values);
return ret.toString();
}
catch (Exception e){
return e.getMessage();
}
8. 删除数据
删除数据是通过DELETE语句完成的,删除语句的条件自然也是根据自增列的数值了。删除是否成功也是通过是否有异常抛出判断的,如果没有异常抛出就表示执行成功了!
删除行数也可以通过update方法的返回值得到!
try {
String sql = "delete from user" +
" where userID = ?";
Object[] values = new Object[]{16};
Integer ret = jdbcTemplate.update(sql, values);
return ret.toString();
}
catch (Exception e){
return e.getMessage();
}
9. 查询数据
查询语句就是SELECT语句,这是数据库操作里面最最常用的SQL语句了,单表查询、多表连接查询、子查询、分组查询、汇总查询、结果排序等等一系列的SQL查询技巧福哥今天不想在这里讲解,我们只用一个最简单的单表查询演示JdbcTemplate是如何实现数据查询的就可以了~~
JdbcTemplate有非常多的query方法可以适应各种情况的需要,而一般情况下查询单行数据可以使用queryForMap,查询多行数据可以使用queryForList,最终得到的都是Map<String, Object>这个经典的数据结构。
List<Map<String, Object>> map = jdbcTemplate.queryForList("select * from user order by userID desc");
String ret = "";
for(int i=0;i<map.size();i++){
Map<String, Object> myMap = map.get(i);
ret += myMap.get("userID").toString() + "@" + myMap.get("userName") + "<br />";
}
10. 注意事项
使用JdbcTemplate对象操作MySQL数据库有一些注意事项,大家一定要认真看哦~~
- 一定要保证数据库服务的健康状态以及数据源参数的可用性,否则会一旦连接失败就会造成项目无法启动的风险。
- 无论的读取数据还是插入数据又或者是更新数据,最好将逻辑放入try … catch语句里面,避免程序异常。
11. 总结
今天福哥给童鞋们演示了使用JdbcTemplate库连接MySQL数据库进行各种常规操作的技巧,这里面都是一些简单的基础操作。不过,即使是复制的SQL语句也和今天福哥将的内容大同小异,举一反三就可以实现了。
后面福哥会找时间专门给童鞋们讲解SQL语句的使用技巧,包括各种复杂的使用场景,各种复杂的查询语句,大家可以先行自己研究研究。
https://m.tongfu.net/home/35/blog/513229.html
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://itzsg.com/10027.html