spring学习笔记(JDBCTemplate)

一、 JDBCTemplate 分析

1.1 JDBCTemplate 是什么? spring中提供了一个可以操作数据库的对象JDBCTemplate,这个对象封装了jdbc技术。
1.2 JDBCTemplate连接数据库
       1.2.1.导包:
4(spring-beans+spring-context+spring-core+spring-expression)+2(spring-logging+spring-log4j) + Junit整合(spring-test+spring-aop) + JDBC驱动+C3P0连接池 + spring-jdbc + spring-tx
       1.2.2 准备数据库(建User表)
这里写图片描述

public class User {
    private Integer id;
    private String name;
    public Integer getId() {
        return id;
    }
    public void setId(Integer id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }


}

       1.2.3 C3P0的连接池测试
这里写图片描述

    1.2.4 代码演示

  1. 写UserDao
public interface  userDao {
    public void save(User user);
    public void update(User user);
    public void delete(Integer id);
    public int queryCount();
    public User queryById(Integer id);
    public List<User> queryAll();
}

2.写实现类UserDaoImpl

public class UserDaoImpl implements userDao{

    private JdbcTemplate jT;

    @Override
    public void save(User user) {
        String sql="insert into jt_user values(?,?)";
        jT.update(sql,user.getId(),user.getName());
    }

    @Override
    public void update(User user) {
         String sql="update jt_user set name=? where id=?";
         jT.update(sql, user.getName(),user.getId());
    }

    @Override
    public void delete(Integer id) {
        String sql="delete from jt_user where id=?";
        jT.update(sql, id);
    }

    @Override
    public int queryCount() {
         String sql  = "select count(1) from jt_user";
         Integer count = jT.queryForObject(sql,Integer.class);
         return count;
    }

    @Override
    public User queryById(Integer id) {
         String sql=" select * from jt_user where id =?";
         User u = jT.queryForObject(sql, new RowMapper<User>(){

            @Override
            public User mapRow(ResultSet rs, int index) throws SQLException {
                User user = new User();
                user.setId(rs.getInt("id"));
                user.setName(rs.getString("name"));
                return user;
            }

         }, id);
         return u;
    }

    @Override
    public List<User> queryAll() {
        String sql=" select * from jt_user";
        List<User> list = jT.query(sql, new RowMapper<User>(){

            @Override
            public User mapRow(ResultSet rs, int index) throws SQLException {
                User user = new User();
                user.setId(rs.getInt("id"));
                user.setName(rs.getString("name"));
                return user;
            }

         });
         return list;
    }


    public JdbcTemplate getjT() {
        return jT;
    }

    public void setjT(JdbcTemplate jT) {
        this.jT = jT;
    }

}

3.配置文件 ApplicationContext.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.springframework.org/schema/beans" xmlns:context="http://www.springframework.org/schema/context" xmlns:aop="http://www.springframework.org/schema/aop" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.2.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.2.xsd ">
    <bean name="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
        <property name="jdbcUrl" value="jdbc:mysql://localhost:3306/data"></property>
        <property name="driverClass" value="com.mysql.jdbc.Driver"></property>
        <property name="user" value="root"></property>
        <property name="password" value="root"></property>
    </bean>
<bean name="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
    <property name="dataSource" ref="dataSource"></property>
</bean>
<bean name="userDao" class="com.tz.JDBC.UserDaoImpl">
    <property name="jT" ref="jdbcTemplate"></property>   
</bean>

</beans>

4.编写测试类

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("classpath:com/tz/JDBC/ApplicationContext.xml")
public class test {
    @Resource(name="userDao")
    private userDao ud; 
    @Test
    public void saveTest(){
        User user = new User();
        user.setId(3);
        user.setName("mm");
        ud.save(user);
    }

    @Test
    public void updateTest(){
        User user = new User();
        user.setId(1);
        user.setName("xxs");
        ud.update(user);
    }

    @Test
    public void delTest(){
        ud.delete(1);
    }
    @Test
    public void findcount(){
        int queryCount = ud.queryCount();
        System.out.println(queryCount);
    }

    @Test
    public void findById(){
        User queryById = ud.queryById(1);
        System.out.println(queryById);
    }
    @Test
    public void findAll(){
        List<User> queryAll = ud.queryAll();
        System.out.println(queryAll);
    }

}

改进:
1. 继承JdbcDaoSupport

public class UserDaoImpl extends JdbcDaoSupport implements userDao{

//  private JdbcTemplate jT; //这时就不用注入这个变量了
    @Override
    public void save(User user) {
        String sql="insert into jt_user values(?,?)";
//      jT.update(sql,user.getId(),user.getName());
        getJdbcTemplate().update(sql,user.getId(),user.getName());
    }
}

2.在src下编写db.properties文件

jdbc.jdbcUrl= jdbc:mysql:///xxxxx
jdbc.driverClass=com.mysql.jdbc.Driver
jdbc.user=root
jdbc.password=xxx

3.配置文件如下:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.springframework.org/schema/beans" xmlns:context="http://www.springframework.org/schema/context" xmlns:aop="http://www.springframework.org/schema/aop" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.2.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.2.xsd ">
    <!--读取配置文件  -->
    <context:property-placeholder location="classpath:db.properties"/>
    <bean name="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
        <property name="jdbcUrl" value="${jdbc.jdbcUrl}"></property>
        <property name="driverClass" value="${jdbc.driverClass}"></property>
        <property name="user" value="${jdbc.user}"></property>
        <property name="password" value="${jdbc.password}"></property>
    </bean>
<bean name="userDao" class="com.tz.JDBC.UserDaoImpl">
    <property name="dataSource" ref="dataSource"></property>   
</bean>

</beans>

总结:spring操作数据库的过程和以前我们学JDBC的时候差不多,只是spring帮我们封装并管理了一系列的对象,相比我们的hibernate和Mybatis ,是不是感觉有点复杂呢? 在后面的学习中我们再详细讨论。

猜你喜欢

转载自blog.csdn.net/weixin_38008100/article/details/81336081