查询操作 主要分为 查询出某个值 查询出一个对象 查询出一个集合
之前我们在文章java Spring JdbcTemplate配合mysql查询一个表中具体有几条数据中演示了查询某个值的方法
那么 下面我们来演示 查询一个对象
首先 查询 还是非常常用的 比如 你在一个图书界面列表中 点其中一本书进去看详情 他就要通过id 去获取这本书的对象 从而实现详情的展示
先做一下准备工作 数据库中有一个 test数据库 在下面有一张表 叫 user_list 里面有这样几条数据
我们将用它作为数据来源
我们在src下创建一个包 叫 mydata
在里面创建一个类 叫 user_list
参考代码如下
package mydata;
public class user_list {
private int user_id;
private String user_name;
private String user_post;
private int superior_id;
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 String getUser_post() {
return user_post;
}
public void setUser_post(String user_post) {
this.user_post = user_post;
}
public int getSuperior_id() {
return superior_id;
}
public void setSuperior_id(int superior_id) {
this.superior_id = superior_id;
}
}
这里 的几个属性 都会数据中的user_list 表一一对应 这就是一个属性类 我们将用它作为数据库的对象载体
在 src下创建目录 叫 dao
在下面创建一个接口 叫 BookDao 参考代码如下
package dao;
import mydata.user_list;
public interface BookDao {
user_list getUser_list(int user_id);
}
我们定义了一个getUser_list方法 他接收一个int数字类型的属性 叫 user_id 然后返回一个user_list 对象类型的值
因为 详情对象查询 都要通过id去查 所以 这里要接收这个user_id
然后 我们在dao中创建一个类 叫 BookDaoImpl
编写代码如下
package dao;
import mydata.user_list;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Repository;
@Repository
public class BookDaoImpl implements BookDao {
@Autowired
private JdbcTemplate jdbcTemplate;
@Override
public user_list getUser_list(int user_id) {
String sql = "select * from user_list where user_id=?";
user_list user_list = jdbcTemplate.queryForObject(sql,new BeanPropertyRowMapper<user_list>(user_list.class),user_id);
return user_list;
}
}
BookDaoImpl 实现了BookDao 接口 并重写了其中的 getUser_list方法 这里 我们用的还是上一文中的jdbcTemplate.queryForObject操作数据库 但这次换了一种传参形式 第一个 是 sql语句 这没什么好说的
第二个是 要new一个BeanPropertyRowMapper接口对象 泛型<>中写你对象的名字 然后后面括号中放入你这个方法返回的对象.class
然后 第三个参数 就是sql语句中的可变参数
这里 我们sql就是以user_id作为条件 查询一整条数据回来 然后getUser_list会将查到的结构完整返回出来
然后在src下创建一个包 叫 senvice
然后在下面创建一个类 叫 BookService
参考代码如下
package senvice;
import dao.BookDao;
import mydata.user_list;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@Service
public class BookService {
@Autowired
protected BookDao BookDao;
public user_list getUser_list (int user_id) {
return BookDao.getUser_list(user_id);
}
}
这里 我们重写了一层 调用BookDao中的getUser_list 这是做个结构
为了方便大家后续查看 我们直接将 mydata 包下的user_list 类 的 toString方法重写一下
这样就会方便大家后续查看他的属性
然后 我们在src下创建一个配置文件 我这里叫 bean.xml 参考代码如下
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">
<!-- 数据库连接池 -->
<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource"
destroy-method="close">
<property name="url" value="jdbc:mysql:///test" /><!--对应SQLyog里的数据库-->
<property name="username" value="root" /> <!-- 用户名 -->
<property name="password" value="root" /> <!-- 密码 -->
<property name="driverClassName" value="com.mysql.jdbc.Driver" />
</bean>
<!-- JdbcTemplate对象 -->
<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
<!--注入dataSource属性-->
<property name="dataSource" ref="dataSource"></property>
</bean>
<context:component-scan base-package="senvice"></context:component-scan>
<context:component-scan base-package="dao"></context:component-scan>
</beans>
都是些配置过好多次的东西了 这里就不多做解释
然后 我们就来查这第三条数据
在src下创建测试类 参考代码如下
import mydata.user_list;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import senvice.BookService;
public class text {
public static void main(String args[]) {
ApplicationContext context = new ClassPathXmlApplicationContext("bean.xml");
BookService bookService = context.getBean("bookService", BookService.class);
user_list user = bookService.getUser_list(3);
System.out.println(user);
}
}
我们 通过读取xml 反射创建BookService对象 调用其中的getUser_list方法 因为 我们要查的第三条数据 user_id是 3 我们是根据 user_id查询的 所以 这里直接传3 去查询
然后 定义一个user_list类型的 叫user 的值来接收方法返回值
运行结果如下
也是没有任何问题