Spring入门——JdbcTemplate

创建JdbcTemplate对象 不过没有配置数据源 所以操作不了(可以用set方法设置数据源 也可以直接用构造方法) 这样配置就写死了 这些信息 以及new产生依赖 可以用xml配置 1.JdbcTemplate对象(注入dataSource) 2.数据源dataSource

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans.xsd">

配置完 实现类就可以用获得IOC容器 再得到实例化 获取完对象就可以开始其他的增删改查操作 其中查询所有的方法 query的参数有三个 1.sql语句 2.RowMapper< T >对象 3.sql所需的参数 返回值是一个List 我们根据这几个条件 , 可以在提示中排除找到这两条语句 他们的区别就是一个任意版本都可以用,一个要在jdk1.5以上 然后在需要RomMapper对象时我们可以创建一个得到RomMapper对象的类来返回一个对象给他 这样就可以得到查询所有的值 但在实际开发中 我们不用自己去创建RomMapper方法来获得这个对象,而是用下面这个Spring提供了的方法BeanPropertyRomMapper< T >(T.class) (T是泛型) 同理这个查询一个的也是用这个方法 只是要把条件改成id=? 返回一列的方法queryForObject 中间那个参数是 转换返回值的类型 如果想得到int型就用Integer.class,long型就用Long.class


在我们测试完这些增删改查方法后(在测试类里)后,实际上我们开发中这些方法都是封装在Dao层的而不是测试类这里,所以我们要创建Dao层 Dao接口 Dao实现层 其中这些查询方法和之前测的都差不多 不过在查询id和查询name的时候有不同 id:用正则表达式 如果有返回,没有返回null name:如果为空返回null;如果size大于1,因为name唯一所以报异常;否则(即只有一个时)返回name;

这时候配完了Dao层 里面只有一个JdbcTemplate要注入,我们再往xml里面添加


到这一步没我们就可以改回测试类了 就可以运行了


现在在Dao层其实还有一个问题:Dao层如果不知有一个Dao的实现类(操作用户的Dao,操作商品的Dao等等) 而他们中每次要进行数据库操作 都要注入 这里就造成了重复代码 那么我们要怎么让每个类可以不在一直重复写呢 每个类都有这个对象———>继承 我们只需要写一个公共的Jdbc父类——用于获得JdbcTemplate(通过注入),然后定义一个返回jdbcTemplate方法 然后Dao实现类的方法里就不用成员变量了 直接调用父类的getJdbcTemplate方法获得JdbcTemplate,这样每个Dao都不用重复注入JdbcTemplate 只需要继承这个父类 然后这个父类只注入了JdbcTemplate,(默认是在其他地方建立了JdbcTemplate放在了SpringIOC容器里,然后这时候拿出来注入)实际上我们甚至可以把DataSource也注入进来(即可以在没有JdbcTemplate的情况下,直接用注入进来的DataSource立刻创建JdbcTemplate)根据上面的在Jdbc类里面创建了注入DataSource来创建JdbcTemplate方法(原本是在JdbcTemplate里面做的),所以原来在xml配置的JdbcTemplate以及被代替了,已经可以不用了,我们只需要把DataSource直接注入到Dao层就可以了 最后实际上我们写的这个Jdbc父类,Spring已经帮我们写好了 就叫 功能就是不用我们在xml配置JdbcTemplate,直接把DataSource和JdbcTemplate注入到Dao层即可,而且每个Dao的实现类只需要继承这个父类就不用重复注入JdbcTemplate


但这个方式 和我们之前虽然重复注入有什么区别呢 区别在于之前手动注入里面 成员变量是JdbcTemplate 所以可以用注解的方式@Autowired 而父类这种已经没有成员变量了 所以不能用注解(因为是Spring编写的无法修改)

经验分享 程序员 微信小程序 职场和发展