当前位置: 首页 > news >正文

自己做网站怎么选架构/宁波正规seo推广公司

自己做网站怎么选架构,宁波正规seo推广公司,电子 公司 网站建设,济南网站建设第六网建Spring JDBC框架操作mysql数据库Spring中的JDBC为我们省去连接和关闭数据库的代码,我们着重关注对数据库的操作。Spring框架在数据库开发中的应用主要使用的是JDBCTemplate类,该类作为Spring对JDBC支持的核心,提供了所有对数据库操作功能的支…

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包:

beadb60ade1b694a8b2fde8142252091.png

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

64d9e22cdbcd6a54fa5d618a2084f974.png

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

/p>

"http://www.springframework.org/dtd/spring-beans.dtd">

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

execute()方法

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

public classClient {public static voidmain(String[] args) {//TODO Auto-generated method stub//定义配置文件路径

String path = "com/jdbc/JdbcTemplateBeans.xml";//加载配置文件

ApplicationContext applicationContext = newClassPathXmlApplicationContext(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);*/}

}

d6e3ce43c0bf917fb768427eb36083af.png

update()方法

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

int update(String sql):该方法是最简单的update方法重载形式,可以直接传入SQL语句并返回受影响的行数;

int update(PreparedStatementCreatorpsc):该方法执行从PreparedStatementCreatorpsc返回的语句,然后返回受影响的行数;

int update(String sql, PreparedStatementSetterpss):该方法通过PreparedStatementSetterpss设置SQL语句中的参数,并返回受影响的行数;

int update(String sql, Object...args):该方法使用Object...args设置SQL语句中的参数,要求参数不能为空,并返回受影响的行数。

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

public classUser {private int userID; //用户ID

private String userName; //用户名

private String passwd; //用户密码

public intgetUserID() {returnuserID;

}public void setUserID(intuserID) {this.userID =userID;

}publicString getUserName() {returnuserName;

}public voidsetUserName(String userName) {this.userName =userName;

}publicString getPasswd() {returnpasswd;

}public voidsetPasswd(String passwd) {this.passwd =passwd;

}

}/**用户工厂类负责创建User对象*/

public classUserFactory {public User createUser(String name, intid, String password){

User user= newUser();

user.setUserName(name);

user.setUserID(id);

user.setPasswd(password);returnuser;

}

}

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

/**定义对User对象的操作*/

public interfaceUserDao {public intaddUser(User user);public intupdateUser(User user);public intdeleteUser(User user);

}/** UserDao接口的具体实现类*/

public class UserDaoImpl implementsUserDao{privateJdbcTemplate jdbcTemplate;public voidsetJdbcTemplate(JdbcTemplate jdbc){this.jdbcTemplate =jdbc;

}

@Overridepublic intaddUser(User user) {//TODO Auto-generated method stub

String sql = "insert into t_user(userid,username,password)values(?,?,?)";

Object[] obj= newObject[]{

user.getUserID(),

user.getUserName(),

user.getPasswd()

};return this.execute(sql, obj);

}

@Overridepublic intupdateUser(User user) {//TODO Auto-generated method stub

String sql = "update t_user set username=?,password=? where userid=?";

Object[] obj= newObject[]{

user.getUserName(),

user.getPasswd(),

user.getUserID()

};return this.execute(sql, obj);

}

@Overridepublic intdeleteUser(User user) {//TODO Auto-generated method stub

String sql = "delete from t_user where userid=?";

Object[] obj= newObject[]{

user.getUserID()

};return this.execute(sql, obj);

}//负责SQL语句的执行

private intexecute(String sql, Object[] obj){return this.jdbcTemplate.update(sql, obj);

}

}

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

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

public classClient {public static voidmain(String[] args) {//TODO Auto-generated method stub//定义配置文件路径

String path = "com/jdbc/JdbcTemplateBeans.xml";//加载配置文件

ApplicationContext applicationContext = newClassPathXmlApplicationContext(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);//创建数据库表

UserDao userDao = (UserDao) applicationContext.getBean("userDao");

User user1= new UserFactory().createUser("张三", 1, "qwer");

User user2= new UserFactory().createUser("李四", 2, "password");

User user3= new UserFactory().createUser("王五", 3, "wangwu");//插入三条数据,输出为1则表示插入成功,否则插入失败

System.out.println(userDao.addUser(user1));

System.out.println(userDao.addUser(user2));

System.out.println(userDao.addUser(user3));

}

}

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

917e8584b2bde263335ba3f2354c31de.png

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

public classClient {public static voidmain(String[] args) {//TODO Auto-generated method stub//定义配置文件路径

String path = "com/jdbc/JdbcTemplateBeans.xml";//加载配置文件

ApplicationContext applicationContext = newClassPathXmlApplicationContext(path);

UserDao userDao= (UserDao) applicationContext.getBean("userDao");

User user2= new UserFactory().createUser("李四", 2, "lisi");//更新李四用户的密码为lisi

userDao.updateUser(user2);

}

}

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

fc687594fb3a28dcda20b0d029d7964e.png

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

public classClient {public static voidmain(String[] args) {//TODO Auto-generated method stub//定义配置文件路径

String path = "com/jdbc/JdbcTemplateBeans.xml";//加载配置文件

ApplicationContext applicationContext = newClassPathXmlApplicationContext(path);

UserDao userDao= (UserDao) applicationContext.getBean("userDao");

User user1= new UserFactory().createUser("张三", 1, "qwer");

System.out.println(userDao.deleteUser(user1));

}

}

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

a1bb0c6cd78f0ea7f71c1298eb1626f0.png

query()方法

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

List query(String sql, PreparedStatementSetterpss, RowMapper rowMapper):该方法根据String类型参数提供的SQL语句创建PreparedStatement对象,通过RowMapper将结果返回到List中;

List query(String sql,Object[] args, RowMapper rowMapper):该方法使用Object[]的值来设置SQL中的参数值,采用RowMapper回调方法可以直接返回List类型的数据;

queryForObject(String sql,Object[]args, RowMapper rowMapper):该方法将args参数绑定到SQL语句中,通过RowMapper返回单行记录,并转换为一个Object类型返回;

queryForList(String sql, Object[] args, classelementType):该方法可以返回多行数据的结果,但必须是返回列表,elementType参数返回的是List元素类型。

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

public interfaceUserDao {//在原有代码基础上增加的两个方法

public User findUserByID(intid);public ListfindAllUser();

}/** UserDao接口的具体实现类*/

public class UserDaoImpl implementsUserDao{

@Overridepublic User findUserByID(intid) {//TODO Auto-generated method stub

String sql = "select * from t_user where userid=?";//将结果集通过Java的反射机制映射到Java对象中

RowMapper rowMapper = new BeanPropertyRowMapper(User.class);return this.jdbcTemplate.queryForObject(sql, rowMapper, id);

}

@Overridepublic ListfindAllUser() {//TODO Auto-generated method stub

String sql = "select * from t_user";

RowMapper rowMapper = new BeanPropertyRowMapper(User.class);return this.jdbcTemplate.query(sql, rowMapper);

}

}

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

public classClient {public static voidmain(String[] args) {//TODO Auto-generated method stub//定义配置文件路径

String path = "com/jdbc/JdbcTemplateBeans.xml";//加载配置文件

ApplicationContext applicationContext = newClassPathXmlApplicationContext(path);

User user= userDao.findUserByID(2);

System.out.println(user);

List userList =userDao.findAllUser();for(User u : userList){

System.out.println(u);

}

}

}

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

public classUser {//在原有代码基础上覆写toString()方法

@OverridepublicString toString(){return "user ID:" + this.getUserID() + " userName:" + this.getUserName() + " user password:" + this.getPassword();

}

}

cc4e7a940f05c63102a5fe9aa00eb7da.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()三种方法,并通过案例演示了三种方法的使用。

http://www.lbrq.cn/news/1444807.html

相关文章:

  • 如何把学校网站建设好/成人零基础学电脑培训班
  • 莱芜网站制作/seo关键词排名实用软件
  • 网站做优化有几种方式/必应bing国内版
  • 怎么开网站/行业网站网址
  • 建设网站用什么代码写好呢/株洲今日头条新闻
  • 做书封面的网站/长尾词在线挖掘
  • 安全网站开发/百度点击率排名有效果吗
  • 庆阳网站网站建设/百度网站大全首页
  • 网站基站的建设方案/四川seo快速排名
  • 网站超链接的优化/关键词排名顾问
  • 织梦本地做的网站内网访问不/靠谱的免费建站
  • 沭阳各乡镇做网站/短视频营销的特点
  • 传媒公司营业执照怎么办理/seo的作用是什么
  • 厦门 网站建设闽icp/手机免费建站系统
  • 网站设计收费标准/个人网站模板
  • 网站添加新闻栏怎么做/小程序模板
  • 用网站名查询网址/今日新闻最新
  • 做网站的收入来源/优化推荐
  • 微信引流推广网站建设/运城seo
  • 做网站公司哪家正规/广东seo网站设计
  • 网站数据库密码修改了要怎么做/成都网络营销搜索推广
  • wordpress建站空间推荐/18种最有效推广的方式
  • 网站服务器安装教程视频教程/企业培训课程名称
  • 商城网站入驻系统/网站建设服务
  • 南宁软件优化网站建设/网络seo招聘
  • 域名跟网站的区别/哪个app可以找培训班
  • 中学加强校园网站建设/网络营销的未来发展趋势
  • wordpress后台加载慢/重庆seo入门教程
  • 综合网站开发设计/百度广告竞价
  • 天河建设网站公司排名/在线一键生成网页
  • 新手入门:Git 初次配置与 Gitee 仓库操作全指南 —— 从环境搭建到代码推送一步到位
  • 从 AI 到实时视频通道:基于模块化架构的低延迟直播全链路实践
  • 轻量化阅读应用实践:21MB无广告电子书阅读器测评
  • 若依前后端分离版学习笔记(七)—— Mybatis,分页,数据源的配置及使用
  • 项目一系列-第4章 在线接口文档 代码模板改造
  • 零成本建站:将 Windows 电脑变身为个人网站服务器