eclipse连接mysql_Spring JDBC框架操作mysql数据库

  • Spring中的JDBC为我们省去连接和关闭数据库的代码,我们着重关注对数据库的操作。Spring框架在数据库开发中的应用主要使用的是JDBCTemplate类,该类作为Spring对JDBC支持的核心,提供了所有对数据库操作功能的支持。我们将使用JDBCTemplate类完成对mysql数据库的增、删、改、查等操作。
  • Spring框架提供JDBC支持主要由4个包组成,分别是core(核心包)、object(对象包)、dataSource(数据源包)和support(支持包),JdbcTemplate类就在核心包中,该类包含所有数据库操作的基本方法。

core核心包:包含了JDBC的核心功能,重要的类:JdbcTemplate类、SimpleJdbcInsert类、SimpleJdbcCall类以及NamedParameterJdbcTemplate类;

dataSource:数据源包,访问数据源的实用工具类,他有多种数据源的实现,可以在JavaEE容器外部测试JDBC代码;

object:对象包,以面向对象的方式访问数据库,它允许执行查询并返回结果作为业务对象,可以在数据表的列和业务对象的属性之间映射查询结果;

support支持包:core和object包的支持类,例如,提供异常转换功能的SQLException类。

  • 首先介绍一下项目创建前的准备,本地mysql数据库安装完成,且可以用root用户登入,登入密码为123;而且需要额外的一些jar包:
186a36cc574a050657b19b33a840d75a.png

然后在mysql数据库中创建名为User的数据库,此时数据库User中没有任何表项:

06c46eccff2d3f0dc5934fc55fe2ec8a.png

然后在Eclipse下新建Java项目,并且在src目录下新建lib文件夹,将jar包复制到lib文件夹下,对jar包配置路径(Build Path),然后在src目录下新建包com.jdbc,在包下新建applicationContext.xml文件,该文件为Spring的JDBC配置文件,文件如下:

<?xml version="1.0" encoding="UTF-8"?>

JdbcTemplate提供大量的查询和更新数据库的方法,如下我们分别介绍execute()方法、update()方法、query()方法。

  • execute()方法

execute(String sql)方法能够完成执行SQL语句的功能,下面以创建和删除数据库表的SQL语句为例,在如上创建的Java项目的src目录的com.jdbc下创建Client类,调用JdbcTemplate对象的execute()方法,实现对数据库表的创建和删除。代码如下:

public class Client { public static void main(String[] args) { // TODO Auto-generated method stub //定义配置文件路径 String path = "com/jdbc/JdbcTemplateBeans.xml"; //加载配置文件 ApplicationContext applicationContext = new ClassPathXmlApplicationContext(path); //获取jdbcTemplate实例 JdbcTemplate jdbcTemplate = (JdbcTemplate) applicationContext.getBean("jdbcTemplate"); String sql = "create table t_user(userID int primary key auto_increment, userName varchar(20), password varchar(32))"; jdbcTemplate.execute(sql); /* * //当t_user表创建完成后,下一次执行如下两条语句,该数据库表t_user将会被删除 *  String deltable = "drop table t_user"; jdbcTemplate.execute(deltable);*/ }}
b7bc27bab5ceada93aa2beb7e1ffc126.png
  • update()方法

update()方法可以完成插入、更新和删除操作。在update方法中存在多个重载的方法,具体介绍如下:

  1. int update(String sql):该方法是最简单的update方法重载形式,可以直接传入SQL语句并返回受影响的行数;
  2. int update(PreparedStatementCreatorpsc):该方法执行从PreparedStatementCreatorpsc返回的语句,然后返回受影响的行数;
  3. int update(String sql, PreparedStatementSetterpss):该方法通过PreparedStatementSetterpss设置SQL语句中的参数,并返回受影响的行数;
  4. int update(String sql, Object...args):该方法使用Object...args设置SQL语句中的参数,要求参数不能为空,并返回受影响的行数。

接下来我们实现对用户信息的插入、修改和删除操作。首次按创建User类和UserFactory工厂类,代码如下:

90b14fa8f67652e8bc0a3e696e8ab5c0.png

 接下来创建UserDao接口,负责定义对User数据的操作,实现对User的增加、修改和删除操作,然后定义具体的实现类UserDaoImpl类,代码如下:

/**定义对User对象的操作*/public interface UserDao { public int addUser(User user); public int updateUser(User user); public int deleteUser(User user);}/* * UserDao接口的具体实现类 */public class UserDaoImpl implements UserDao{ private JdbcTemplate jdbcTemplate;  public void setJdbcTemplate(JdbcTemplate jdbc){ this.jdbcTemplate = jdbc; } @Override public int addUser(User user) { // TODO Auto-generated method stub String sql = "insert into t_user(userid,username,password)values(?,?,?)"; Object[] obj = new Object[]{ user.getUserID(), user.getUserName(), user.getPasswd() }; return this.execute(sql, obj); } @Override public int updateUser(User user) { // TODO Auto-generated method stub String sql = "update t_user set username=?,password=? where userid=?"; Object[] obj = new Object[]{ user.getUserName(), user.getPasswd(), user.getUserID() }; return this.execute(sql, obj); } @Override public int deleteUser(User user) { // TODO Auto-generated method stub String sql = "delete from t_user where userid=?"; Object[] obj = new Object[]{ user.getUserID() }; return this.execute(sql, obj); } //负责SQL语句的执行 private int execute(String sql, Object[] obj){ return this.jdbcTemplate.update(sql, obj); }}

UserDaoImpl类中有对JdbcTemplate类的引用,因此要在applicationContext.xml文件中实现UserDaoImpl对JdbcTemplate类的依赖注入,则在如上的applicationContext.xml文件的基础上,需要增加如下代码:

客户端首先实现对User对象的添加操作,代码如下:

c764c99b345287a1041175bb67313a52.png

在数据库端,通过输入select * from t_user; 查询数据库表中的数据,如下图所示:

15639d67b7cc479de90cce1ce3366a48.png

如上图中,我们看到李四用户的密码不太合理,需要更改其密码值,则Client的代码如下:

cd113fd6bebc1b9698aa041857922d25.png

查询数据库t_user表可以看到李四用户的密码已经更改为lisi:

b0391ab0ad466051b589492e70391efa.png

最后我们实现对张三用户的删除操作,代码就很简单了,如下:

7eab949a3e9df1b0c3731667e09aa703.png

最后可以看到张三用户被无情的从数据库表t_user中删除了:

dffd7cf97cbc311f5d8941f3404f6eb3.png
  • query()方法

JdbcTemplate对JDBC的流程做了封装,提供了大量的query()方法来处理各种对数据库表的查询操作,常用的query()方法如下:

  1. List query(String sql, PreparedStatementSetterpss, RowMapper rowMapper):该方法根据String类型参数提供的SQL语句创建PreparedStatement对象,通过RowMapper将结果返回到List中;
  2. List query(String sql,Object[] args, RowMapper rowMapper):该方法使用Object[]的值来设置SQL中的参数值,采用RowMapper回调方法可以直接返回List类型的数据;
  3. queryForObject(String sql,Object[]args, RowMapper rowMapper):该方法将args参数绑定到SQL语句中,通过RowMapper返回单行记录,并转换为一个Object类型返回;
  4. queryForList(String sql, Object[] args, classelementType):该方法可以返回多行数据的结果,但必须是返回列表,elementType参数返回的是List元素类型。

接下来,我们尝试一下从t_user表中查询数据,在UserDao接口中增加按照id查询的方法和查询所有用户的方法,在UserDaoImpl中具体实现两个方法,代码如下:

d564c4466960c54c9a06e38997354b8f.png

 然后在Client类中调用者两个方法,实现对t_user表的查询操作:

1a0a8864d1ce919a3a2a41666d28ab58.png

 同时呢,User类中应该覆写toString()方法,输出用户ID、用户名和用户密码:

1bcde46afc7de4c84c1cf8b8774732dc.png
0a574591429e671085b2ce7b421332a1.png

运行该程序发现在Java反射的过程中password属性的值为null,即没有将数据库中的值映射到User对象中,那么问题出在哪里呢?数据库表t_user中密码字段标签为password,然而Java在反射的过程中,会在User类中找setPassword(String password)方法,而本片博客的User类中设置密码的方法为setPasswd(String passwd),导致在反射过程中无法找到setPassword(String password)方法,最终才会导致查询出来的password字段值为空,解决方法当然是将User类中的setPasswd(String passwd)方法改名为setPassword(String password)即可。

本片博客介绍了JdbcTemplate类对mysql数据库的操作,包括execute()、update()、query()三种方法,并通过案例演示了三种方法的使用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值