目录:一、概述和准备工作
1.什么是Jdbc Template
2.准备工作
二、添加功能
1.基本步骤
2.批量添加
三、修改、删除功能
1.基本步骤
2.批量修改和删除
四、查询功能
1.查询返回某个值
2.查询返回对象
3.查询返回集合
一、概述和准备工作
1.什么是Jdbc Template
Jdbc是Java语言中用来规范客户端程序如何来访问数据库的应用程序接口,提供了诸如查询和更新数据库中数据的方法,而Jdbc Template是对Jdbc的封装。
2.准备工作
从这一章开始,我们重新创建项目spring5_demo2。引入相关的jar包:
除了原本的jar包,还需要新增mysql-connector-java-8.0.23.jar、spring-orm-5.2.6.RELEASE.jar、spring-tx-5.2.6.RELEASE.jar、spring-jdbc-5.2.6.RELEASE.jar,除了第一个后面几个都能在spring-5.2.6.RELEASE-dist文件夹下找到。
需要注意的是,一定要确认好自己的mysql的版本,会影响选择的connector版本。比如,我用的是mysql 8,我在maven仓库中下载的也是connector 8。在xml文件中配置数据库连接池:
首先在src目录下新建bean.xml文件,作如下配置:
配置jdbcTemplate对象,注入DataSource连接池对象:
创建相应的service类和dao类,在dao类中注入JdbcTemplate对象
在com.wang下 创建包service和包dao,在service包下创建BookService类,在dao下创建BookDao接口和其实现类BookDaoImpl,这几个类及接口的代码如下:
@Component
public interface BookDao {
}
@Component
public class BookDaoImpl implements BookDao {
@Autowired
private JdbcTemplate jdbcTemplate;
}
@Service
public class BookService {
@Autowired
private BookDao bookDao;
}在xml配置文件中开启组件扫描,并给创建的类添加相应的注释
前面已经说过了,自己写写代码吧。
二、添加功能
1.基本步骤
(1)对应数据库表创建实体类我们在com.wang下创建包entity,用来存放所有的实体类,然后在entity下创建User类,如下:
package com.wang.entity;
public class User {
private int user_id;
private String user_name;
private int user_age;
private String user_gender;
public User(){}
public User(int user_id, String user_name, int user_age, String user_gender) {
this.user_id = user_id;
this.user_name = user_name;
this.user_age = user_age;
this.user_gender = user_gender;
}
public int getUser_id() {
return user_id;
}
public void setUser_id(int user_id) {
this.user_id = user_id;
}
public String getUser_name() {
return user_name;
}
public void setUser_name(String user_name) {
this.user_name = user_name;
}
public int getUser_age() {
return user_age;
}
public void setUser_age(int user_age) {
this.user_age = user_age;
}
public String getUser_gender() {
return user_gender;
}
public void setUser_gender(String user_gender) {
this.user_gender = user_gender;
}
}编写相应的service类和dao接口和类,并给这些类加上相应的注解,如下:
@Component
public interface UserDao {
//添加的方法 void add(User user);
}
@Component
public class UserDaoImpl implements UserDao {
@Autowired
private JdbcTemplate jdbcTemplate;
//添加的方法 @Override
public void add(User user){
//创建sql语句 String sql="insert into user values(?,?,?,?)";
//调用方法实现,方法返回添加行数,第二个参数arg是一个可变参数列表 Object[] arg={user.getUser_id(),user.getUser_name(),user.getUser_age(),user.getUser_gender()};
int update=jdbcTemplate.update(sql,arg);
System.out.println(update);
}
}
@Service
public class UserService {
//注入dao @Autowired
private UserDao userDao;
//添加的方法 public void addUser(User user){
userDao.add(user);
}
}测试一下,测试代码、IDEA中执行结果、MySQL中执行后结果如下:
@Test
public void testUser(){
ApplicationContext context =new ClassPathXmlApplicationContext("bean.xml");
UserService userService=context.getBean("userService",UserService.class);
userService.addUser(new User(1,"Tracy",25,"female"));
}
2.批量添加UserService中方法:
//批量添加 public void adds(List arg){
userDao.adds(arg);
}UserDao中方法:
//批量添加 void adds(List arg);UserDaoImpl中方法的实现:
//批量添加 @Override
public void adds(List arg) {
String sql="insert into user values(?,?,?,?)";
int[] row=jdbcTemplate.batchUpdate(sql,arg);
System.out.println("批量添加了数据");
}测试类中方法:
//批量添加 List arg=new ArrayList<>();
Object[] o1={3,"坨坨",16,"female"};
Object[] o2={4,"鹏鹏",24,"male"};
Object[] o3={5,"青青",19,"female"};
Object[] o4={6,"春兰",45,"female"};
arg.add(o1);arg.add(o2);arg.add(o3);arg.add(o4);
userService.adds(arg);
三、修改、删除功能
1.基本步骤
和添加操作基本没有太大区别,仅有几个类中具体方法实现的不同。在UserService中添加相应的方法代码:
@Service
public class UserService {
//注入dao @Autowired
private UserDao userDao;
//添加的方法 public void addUser(User user){
userDao.add(user);
}
//修改的方法 public void updateUser(User user){
userDao.update(user);
}
//删除的方法 public void deleteUser(User user){
userDao.delete(user);
}
}UserDao接口中定义相应的方法:
@Component
public interface UserDao {
//添加的方法 void add(User user);
//修改的方法 void update(User user);
//删除的方法 void delete(User user);
}UserDaoImpl类中实现相应的方法:
@Component
public class UserDaoImpl implements UserDao {
@Autowired
private JdbcTemplate jdbcTemplate;
//添加的方法 @Override
public void add(User user){
//创建sql语句 String sql="insert into user values(?,?,?,?)";
//调用方法实现,方法返回添加行数,第二个参数arg是一个可变参数列表 Object[] arg={user.getUser_id(),user.getUser_name(),user.getUser_age(),user.getUser_gender()};
int update=jdbcTemplate.update(sql,arg);
System.out.println("在user表中成功添加数据【"+update+"】行");
}
//修改的方法 @Override
public void update(User user){
//创建sql语句 String sql="update user set user_name=?,user_age=? where user_id=?";
//调用方法实现 Object[] arg={user.getUser_name(),user.getUser_age(),user.getUser_id()};
int update=jdbcTemplate.update(sql,arg);
System.out.println("在user表中成功修改数据【"+update+"】行");
}
//删除的方法 @Override
public void delete(User user){
//创建sql语句 String sql="delete from user where user_id=?";
//调用方法实现 Object[] arg={user.getUser_id()};
int update=jdbcTemplate.update(sql,arg);
System.out.println("在user表中成功删除数据【"+update+"】行");
}
}最后,测试类:
public class TestDemo {
@Test
public void testUser(){
ApplicationContext context =new ClassPathXmlApplicationContext("bean.xml");
UserService userService=context.getBean("userService",UserService.class);
User user=new User(2,"Tracy0",25,"female");
//增加数据 userService.addUser(user);
//修改数据 user.setUser_age(18);
user.setUser_name("猫猫兔");
userService.updateUser(user);
//删除数据 user.setUser_id(1);
userService.deleteUser(user);
}
}
2.批量修改和删除UserService中方法:
//批量删除 public void deletes(List arg){
userDao.deletes(arg);
}
//批量修改 public void updates(List arg){
userDao.updates(arg);
}UserDao中方法:
//批量删除 void deletes(List arg);
//批量修改 void updates(List arg);UserDaoImpl中方法的实现:
//批量删除 @Override
public void deletes(List arg) {
String sql="delete from user where user_id=?";
jdbcTemplate.batchUpdate(sql,arg);
System.out.println("批量删除成功");
}
//批量修改 @Override
public void updates(List arg) {
String sql="update user set user_name=?,user_age=? where user_id=?";
jdbcTemplate.batchUpdate(sql,arg);
System.out.println("批量修改成功");
}测试类中方法:
@Test
public void testUser(){
ApplicationContext context =new ClassPathXmlApplicationContext("bean.xml");
UserService userService=context.getBean("userService",UserService.class);
//批量删除 List arg1=new ArrayList<>();
Object[] o1={1};
Object[] o2={2};
arg1.add(o1);arg1.add(o2);
userService.deletes(arg1);
//批量修改 List arg2=new ArrayList<>();
Object[] n1={"坨坨1",16,3};
Object[] n2={"鹏鹏1",24,4};
Object[] n3={"青青1",19,5};
Object[] n4={"春兰1",45,6};
arg2.add(n1);arg2.add(n2);arg2.add(n3);arg2.add(n4);
userService.updates(arg2);
}
四、查询功能
1.查询返回某个值UserService中方法:
//查询的方法 //返回某个值 public int searchUser0(){
return userDao.searchUser0();
}UserDao中方法:
//查询的方法 //查询返回某个值 int searchUser0();UserDaoImpl中方法的实现:
//查询的方法 //查询返回某个值 @Override
public int searchUser0() {
//创建sql语句 String sql="select COUNT(user_id) from user";
//调用方法实现 int result=jdbcTemplate.queryForObject(sql,Integer.class);
System.out.println("在user表中共有数据【"+result+"】行");
return result;
}测试类中方法:
@Test
public void testUser(){
ApplicationContext context =new ClassPathXmlApplicationContext("bean.xml");
UserService userService=context.getBean("userService",UserService.class);
//查询数据:返回一个值 System.out.println(userService.searchUser0());
}
2.查询返回对象UserService中方法:
//查询:返回一个对象 public User searchUser1(User user){
return userDao.searchUser1(user);
}UserDao中方法:
//查询:返回某个对象 User searchUser1(User user);UserDaoImpl中方法的实现:
//查询:返回一个对象 @Override
public User searchUser1(User user) {
//创建sql语句 String sql="select * from user where user_id=?";
//调用方法实现 Object[] arg={user.getUser_id()};
User user1=jdbcTemplate.queryForObject(sql,new BeanPropertyRowMapper(User.class),arg);
System.out.println("查询成功");
return user1;
}测试类中方法:
@Test
public void testUser(){
ApplicationContext context =new ClassPathXmlApplicationContext("bean.xml");
UserService userService=context.getBean("userService",UserService.class);
User user=new User(2,"Tracy0",25,"female");
//查询数据:返回一个对象 User u=userService.searchUser1(user);
System.out.println("id:"+u.getUser_id()+" name:"+u.getUser_name()+" 性别:"
+u.getUser_gender()+" 年龄:"+u.getUser_age());
}
3.查询返回集合UserService中方法:
//查询:返回列表 public List searchUser2(User user){
return userDao.searchUser2(user);
}UserDao中方法:
//查询:返回列表 List searchUser2(User user);UserDaoImpl中方法的实现:
//查询:返回列表 @Override
public List searchUser2(User user) {
//创建sql语句 String sql="select * from user where user_gender=?";
//调用方法实现 Object[] arg={user.getUser_gender()};
List users=jdbcTemplate.query(sql,new BeanPropertyRowMapper(User.class),arg);
System.out.println("查询列表成功");
return users;
}测试类中方法:
//查询数据:返回列表 List users=userService.searchUser2(user);
for (User u:users){
System.out.println("id:"+u.getUser_id()+" name:"+u.getUser_name()+
" 性别:"+u.getUser_gender()+" 年龄:"+u.getUser_age());
}