一、基本概念
Spring框架对JDBC进行封装,使用JdbcTemplate方便实现对数据库操作
二、准备工作
< dependencies>
< dependency>
< groupId> mysql</ groupId>
< artifactId> mysql-connector-java</ artifactId>
< version> 5.1.6</ version>
< scope> runtime</ scope>
</ dependency>
< dependency>
< groupId> junit</ groupId>
< artifactId> junit</ artifactId>
< version> 4.13</ version>
< scope> test</ scope>
</ dependency>
< dependency>
< groupId> com.alibaba</ groupId>
< artifactId> druid</ artifactId>
< version> 1.2.3</ version>
</ dependency>
< dependency>
< groupId> org.springframework</ groupId>
< artifactId> spring-context</ artifactId>
< version> 5.0.6.RELEASE</ version>
</ dependency>
< dependency>
< groupId> org.springframework</ groupId>
< artifactId> spring-jdbc</ artifactId>
< version> 5.1.2.RELEASE</ version>
</ dependency>
< dependency>
< groupId> log4j</ groupId>
< artifactId> log4j</ artifactId>
< version> 1.2.14</ version>
</ dependency>
< dependency>
< groupId> org.projectlombok</ groupId>
< artifactId> lombok</ artifactId>
< version> 1.18.12</ version>
< scope> provided</ scope>
</ dependency>
</ dependencies>
<?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 = " driverClassName" value = " com.mysql.jdbc.Driver" />
< property name = " url" >
< value> <![CDATA[jdbc:mysql://localhost:3306/spring?useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC&rewriteBatchedStatements=true]]> </ value>
</ property>
< property name = " username" value = " root" />
< property name = " password" value = " root" />
</ bean>
配置JdbcTemplate对象,注入DataSource对象
< bean class = " org.springframework.jdbc.core.JdbcTemplate" id = " jdbcTemplate" >
< property name = " dataSource" ref = " dataSource" />
</ bean>
< context: component-scan base-package = " com.du.spring" />
文件结构 pojo/bean
@Data
@AllArgsConstructor
@NoArgsConstructor
public class User {
private int id;
private String username;
private String phone;
}
public interface UserDao {
int addUser ( User user) ;
}
@Repository
public class UserDaoImpl implements UserDao {
@Autowired
JdbcTemplate jdbcTemplate;
@Override
public int addUser ( User user) {
String sql = "insert into user_info(username, phone) values(?,?);" ;
return jdbcTemplate. update ( sql, user. getUsername ( ) , user. getPhone ( ) ) ;
}
}
public interface UserService {
int addUser ( User user) ;
}
@Service
public class UserServiceImpl implements UserService {
@Autowired
private UserDao userDaoImpl;
@Override
public int addUser ( User user) {
return userDaoImpl. addUser ( user) ;
}
}
public class Demo {
private static final Logger logger = Logger . getLogger ( Demo . class ) ;
@Test
public void test ( ) {
ApplicationContext context = new ClassPathXmlApplicationContext ( "bean1.xml" ) ;
UserService userServiceImpl = context. getBean ( "userServiceImpl" , UserServiceImpl . class ) ;
int res = userServiceImpl. addUser ( new User ( "jhon" , "1434314" ) ) ;
if ( res > 0 )
logger. info ( "添加成功" ) ;
else
logger. info ( "添加失败" ) ;
}
}
三、CRUD
@Override
public int countUser ( ) {
String sql = "select count(*) from user_info" ;
Integer res = jdbcTemplate. queryForObject ( sql, Integer . class ) ;
if ( res != null ) return res;
throw new RuntimeException ( "查不到" ) ;
}
@Override
public User selectUserById ( int id) {
String sql = "select * from user_info where id = ?" ;
User user = jdbcTemplate. queryForObject ( sql, new BeanPropertyRowMapper < > ( User . class ) , id) ;
if ( user != null ) return user;
throw new RuntimeException ( "查不到" ) ;
}
RowMapper
是接口,针对返回不同类型数据,使用这个接口里面实现类完成数据封装
@Override
public List < User > selectUsers ( ) {
String sql = "select id, username, phone from user_info" ;
return jdbcTemplate. query ( sql, new BeanPropertyRowMapper < > ( User . class ) ) ;
}
RowMapper
是接口,针对返回不同类型数据,使用这个接口里面实现类完成数据封装
@Override
public int deleteUserById ( int id) {
String sql = "delete from user_info where id = ?" ;
return jdbcTemplate. update ( sql, id) ;
}
@Override
public int updateUser ( User user) {
String sql = "update user_info set username = ?, phone = ? where id = ?;" ;
return jdbcTemplate. update ( sql, user. getUsername ( ) , user. getPhone ( ) , user. getId ( ) ) ;
}
四、批量操作
@Override
public void batchAddUsers ( List < Object [ ] > batchArgs) {
String sql = "insert into user_info(username, phone) values(?,?);" ;
int [ ] ints = jdbcTemplate. batchUpdate ( sql, batchArgs) ;
System . out. println ( Arrays . toString ( ints) ) ;
}
@Test
public void batchAddUsersTest ( ) {
List < Object [ ] > batchArgs = new ArrayList < > ( ) ;
Object [ ] o1 = { "nihao" , "458785" } ;
Object [ ] o2 = { "shijie" , "458785" } ;
batchArgs. add ( o1) ;
batchArgs. add ( o2) ;
userServiceImpl. batchAddUsers ( batchArgs) ;
}
@Override
public void batchUpdateUsers ( List < Object [ ] > batchArgs) {
String sql = "update user_info set username = ?, phone = ? where id = ?;" ;
int [ ] ints = jdbcTemplate. batchUpdate ( sql, batchArgs) ;
System . out. println ( Arrays . toString ( ints) ) ;
}
@Test
public void batchUpdateUsersTest ( ) {
List < Object [ ] > batchArgs = new ArrayList < > ( ) ;
Object [ ] o1 = { "nihao" , "458785" , 5 } ;
Object [ ] o2 = { "shijie" , "458785" , 6 } ;
batchArgs. add ( o1) ;
batchArgs. add ( o2) ;
userServiceImpl. batchUpdateUsers ( batchArgs) ;
}
@Override
public void batchDeleteUsers ( List < Object [ ] > batchArgs) {
String sql = "delete from user_info where id = ?" ;
int [ ] ints = jdbcTemplate. batchUpdate ( sql, batchArgs) ;
System . out. println ( Arrays . toString ( ints) ) ;
}
@Test
public void batchDeleteUsersTest ( ) {
List < Object [ ] > batchArgs = new ArrayList < > ( ) ;
Object [ ] o1 = { 5 } ;
Object [ ] o2 = { 6 } ;
batchArgs. add ( o1) ;
batchArgs. add ( o2) ;
userServiceImpl. batchDeleteUsers ( batchArgs) ;
}