JdbcTemplate
Spring 框架對(duì) JDBC 進(jìn)行封裝鳞仙,使用 JdbcTemplate 方便實(shí)現(xiàn)對(duì)數(shù)據(jù)庫(kù)操作
配置如下
1.新建一個(gè)maven工程
2.一個(gè)User實(shí)體類、字段為userNo笔时、userName棍好、userSex、userAge,get 允耿、set方法
3.一個(gè)測(cè)試類
4.一個(gè)User表,字段 userName借笙、userSex、userAge较锡、userNo
5.ApplicationContext配置文件:
<?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">
<!-- 數(shù)據(jù)源-->
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="com.mysql.cj.jdbc.Driver"></property>
<property name="url" value="jdbc:mysql://192.168.x.x:3306/school?characterEncoding=utf8&useSSL=false"/>
<property name="username" value="root"/>
<property name="password" value="xxR)xx97aod_oJxx!"/>
</bean>
<!-- 引用數(shù)據(jù)源-->
<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
<property name="dataSource" ref="dataSource"></property>
</bean>
</beans>
實(shí)操代碼
新增數(shù)據(jù):?代表具體占位符业稼,updata后的參數(shù)是sql里面的值,根據(jù)順序排列
BeanFactory factory = new ClassPathXmlApplicationContext("ApplicationContext.xml");
JdbcTemplate jdbcTemplate = (JdbcTemplate) factory.getBean("jdbcTemplate");
String sql = "INSERT INTO `school`.`User`(`userNo`, `userName`, `userAge`, `userSex`) VALUES (?, ?, ?, ?);";
int count = jdbcTemplate.update(sql,2005,"兩三",211,"男");
System.out.println(count);//表示被修改的數(shù)據(jù)的條數(shù)蚂蕴,因?yàn)樾略鲆粭l結(jié)果為0
刪除數(shù)據(jù):
String sqldelete = "delete from `school`.`User` where userNo = ?";
int countdelete = jdbcTemplate.update(sqldelete,2004);
System.out.println(countdelete);//同新增低散,如果刪除的id不存在則條數(shù)為0
更新數(shù)據(jù):
String sqlUpdate = "update `school`.`User` set userName=?,userSex=?,userAge=? where userNo=?;";
int countUpdate = jdbcTemplate.update(sqlUpdate,"八兩","女",21,2005);
System.out.println(countUpdate);
查詢數(shù)據(jù):
queryForObject()只能查詢一列
String sqlselectOne = "select userName from `school`.`User` where userNo = ?";
String userName = jdbcTemplate.queryForObject(sqlselectOne,String.class,2005);
System.out.println(userName);
queryForObject()可以查詢所有列,但是需要給個(gè)策略(什么值賦值到什么字段)
//查所有字段
String sqlselect = "select * from `school`.`User` where userNo = ?";
//new RowMapper<User>()實(shí)現(xiàn)這個(gè)接口中的方法骡楼,給一個(gè)策略
User user =jdbcTemplate.queryForObject(sqlselect, new RowMapper<User>() {
@Override
public User mapRow(ResultSet rs, int rowNum) throws SQLException {
User user = new User();
user.setUserNo(rs.getInt("userNo"));
user.setUserAge(rs.getInt("userAge"));
user.setUserName(rs.getString("userName"));
user.setUserSex(rs.getString("userSex"));
return user;
}
}, 2005);
System.out.println(user);
queryForList()查詢多行數(shù)據(jù)
String sqls = "select * from `school`.`User`";
//queryForList方法存入map中熔号,不需要給策略
List<Map<String, Object>> list = jdbcTemplate.queryForList(sqls);
System.out.println(list);
query()查詢多行數(shù)據(jù)
public class Celue implements RowMapper {
@Override
public User mapRow(ResultSet rs, int rowNum) throws SQLException {
User user = new User();
user.setUserNo(rs.getInt("userNo"));
user.setUserAge(rs.getInt("userAge"));
user.setUserName(rs.getString("userName"));
user.setUserSex(rs.getString("userSex"));
return user;
}
}
String sqls = "select * from `school`.`User`";
//query存入實(shí)體類對(duì)象,需要給策略(什么值存入什么字段中)
List<User> list1 = jdbcTemplate.query(sqls,new Celue());
System.out.println(list1);