1、Spring对不同的持久化支持
Spring为各种支持的持久化技术,都提供了简单操作的模板和回调:
ORM持久化技术 | 模板类 |
---|---|
JDBC | org.springframework.jdbc.core.JdbcTemplate |
Hibernate5.0 | org.springframework.orm.hibernate5.HibernateTemplate |
JDBC | org.springframework.jdbc.core.JdbcTemplate |
IBatis(MyBatis) | org.springframework.orm.ibatis.SqlMapClientTemplate |
JPA | org.springfrmaework.orm.jpa.JpaTemplate |
2、使用JdbcTemplate需要的jar包
- mysql-connector-java-5.1.29.jar
- spring-jdbc-4.0.5.RELEASE.jar
- spring-tx-4.0.5.RELEASE.jar
3、JdbcTemplate使用的基本步骤
使用范例:
package com.hy.spring.jdbc.template;
import org.junit.Test;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.test.context.ContextConfiguration;
public class TestJdbcTemplate {
@Test
public void Test() {
// JDBC模板依赖于连接池来获得数据的连接,所以必须先要构造连接池
DriverManagerDataSource dataSource = new DriverManagerDataSource();
dataSource.setDriverClass("com.mysql.jdbc.Driver");
dataSource.setJdbcUrl("jdbc:mysql://localhost:3306/testdb");
dataSource.setDriverClass("com.mysql.jdbc.Driver");
dataSource.setUser("root");
dataSource.setPassword("2015");
// 创建JDBC模板,此处使用了构造方法
JdbcTemplate jTemplate=new JdbcTemplate(dataSource);
String sql="insert into user(name,password) value(?,?)";
jTemplate.update(sql,"test3","test3");
}
}
5、借用JdbcTemplate,实现简单是增删改查功能
5.1、new一个web project
5.2、加入必备的jar包(如下图)、配置log4j.properties、db.properties文件
5.3、数据库,数据表准备
5.4、创建一个User类、new一个dao接口,并实现
User类
package com.hy.spring.pojo;
public class User {
private int id;
private String name;
private String password;
@Override
public String toString() {
return "User [id=" + id + ", name=" + name + ", password=" + password + "]";
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
UserDao 接口
package com.hy.spring.dao;
import java.util.List;
import com.hy.spring.pojo.User;
public interface UserDao {
//增加用户信息
void save(User user);
//删除用户信息
void delete(Integer id);
//更新用户信息
void update(User user);
//通过id查找用户信息
User getById(Integer id);
//获取所有用户信息
List<User> getAll();
//
int getTotalCount();
}
UserDaoImpl实现接口UserDao
package com.hy.spring.dao.impl;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.List;
import javax.annotation.Resource;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.RowMapper;
import org.springframework.stereotype.Repository;
import com.hy.spring.dao.UserDao;
import com.hy.spring.pojo.User;
@Repository("userDao")
public class UserDaoImpl implements UserDao {
@Resource(name="jdbcTemplate")//查找bean中name为jdbcTemplate的类,实例化其对象
private JdbcTemplate jTemplate;
@Override
public void save(User user) {
String sql = "insert into user(name,password) value(?,?)";
jTemplate.update(sql,user.getName(),user.getPassword());
}
@Override
public void delete(Integer id) {
String sql = "delete from user where id= ?";
jTemplate.update(sql,id);
}
@Override
public void update(User user) {
String sql = "update user set name = ? , password = ? where id = ? ";
jTemplate.update(sql,user.getName(),user.getPassword(),user.getId());
}
@Override
public User getById(Integer id) {
String sql = "select * from user where id = ?";
//JdbcTemplate封装的queryForObject方法能帮我们实现遍历
User user = jTemplate.queryForObject(sql, new RowMapper<User>(){
@Override
public User mapRow(ResultSet rs, int arg1) throws SQLException {
User user = new User();
user.setName(rs.getString("name"));
user.setPassword(rs.getString("password"));
user.setId(rs.getInt("id"));
return user;
}
},id);
return user;
}
@Override
public List<User> getAll() {
String sql = "select * from user";
//注意:此处为调用query函数,末尾不需要传入id,
List<User> listUser = jTemplate.query(sql, new RowMapper<User>(){
@Override
public User mapRow(ResultSet rs, int arg1) throws SQLException {
User user = new User();
user.setName(rs.getString("name"));
user.setPassword(rs.getString("password"));
user.setId(rs.getInt("id"));
return user;
}
});
return listUser;
}
@Override
public int getTotalCount() {
String sql="select count(1) from user";
Integer count=jTemplate.queryForObject(sql, Integer.class);
return count;
}
}
test测试一下
package com.hy.spring.jdbc.template;
import java.util.List;
import javax.annotation.Resource;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import com.hy.spring.dao.UserDao;
import com.hy.spring.pojo.User;
import com.mchange.v2.c3p0.ComboPooledDataSource;
//创建容器
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("classpath:applicationContext.xml")
public class TestJdbcTemplate {
//控制反转创建userDao对象
@Resource(name="userDao")
private UserDao userDao;
@Test
public void saveTest() {
User user=new User();
user.setName("spring");
user.setPassword("spring");
userDao.save(user);
}
@Test
public void deleteTest() {
userDao.delete(4);
}
@Test
public void updeteTest() {
User user=new User();
user.setName("changespring");
user.setPassword("changespring");
user.setId(1);
userDao.update(user);
}
@Test
public void getByIdTest() {
System.out.println(userDao.getById(2));
}
@Test
public void getAllTest() {
List<User> list=userDao.getAll();
System.out.println(list);
}
@Test
public void getTotalCountTest() {
Integer countInteger= userDao.getTotalCount();
System.out.println(countInteger);
}
}
总结:
- Spring全套管理各种组件,注入、控制反转等,将组件之间的关系以配置文件的形式串联起来,最大程度的对应用解耦和
- 多练习配置文件编写,注入的方式、写法还不是很熟