Spring二刷笔记-JdbcTemplate
Posted 滑稽404#
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Spring二刷笔记-JdbcTemplate相关的知识,希望对你有一定的参考价值。
文章目录
一、使用JdbcTemplate依赖
spring-jdbc:spring自带封装的jdbc
spring-tx:事务依赖Tranaction
spring-orm:spring整合数据层框架所需依赖
<!--mysql连接驱动-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.32</version>
</dependency>
<!--spring自己封装的jdbc-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>5.3.6</version>
</dependency>
<!--事务依赖 Transaction -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-tx</artifactId>
<version>5.3.6</version>
</dependency>
<!--spring整合数据层框架所需依赖-->
<dependency>
<groupId>springframework</groupId>
<artifactId>spring-orm</artifactId>
<version>1.2.6</version>
</dependency>
以下样例使用的druid连接池
<!--druid连接池-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.2.6</version>
</dependency>
二、配置Druid数据源和JdbcTemplate
<!--引入外部文件-->
<context:property-placeholder location="classpath:jdbc.properties"/>
<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource">
<property name="driverClassName" value="${jdbc.driverClassName}" />
<property name="url" value="${jdbc.url}" />
<property name="username" value="${jdbc.username}" />
<property name="password" value="${jdbc.password}" />
</bean>
<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
<property name="dataSource" ref="dataSource"/>
</bean>
三、JdbcTemplate操作数据库
1、样例代码
(1)dao层
给dao层实现类注入jdbcTemplate
使用jdbcTemplate实现CRUD
@Repository
public class TicketMapper implements TicketDao {
@Autowired
JdbcTemplate jdbcTemplate;
//添加数据
public void add(Ticket ticket) {
String sql="insert into ticket (id,name,author) values(?,?,?)";
int update=jdbcTemplate.update(sql,ticket.getTicketId(),ticket.getTicketName(),ticket.getAuthor());
System.out.println(update);
}
//删除数据
public void delete(int id) {
String sql="delete from ticket where id=?";
int update=jdbcTemplate.update(sql,id);
System.out.println(update);
}
//查询对象
public Ticket query(int id) {
String sql="select id ticketId,name ticketName,author from ticket where id=?";
Ticket ticket=jdbcTemplate.queryForObject(sql,new BeanPropertyRowMapper<Ticket>(Ticket.class),id);
return ticket;
}
//查询集合
public List<Ticket> findAll() {
String sql="select id ticketId,name ticketName,author from ticket";
List<Ticket> ticketList=jdbcTemplate.query(sql,new BeanPropertyRowMapper<Ticket>(Ticket.class));
return ticketList;
}
public void update(Ticket ticket) {
String sql="update ticket set name=? , author=? where id=?";
String args[]={ticket.getTicketName(),ticket.getAuthor(),ticket.getTicketId()};
int update = jdbcTemplate.update(sql, args);
System.out.println(update);
}
//查询记录总数
public int seleteCount() {
String sql="select COUNT(*) from ticket";
Integer cnt = jdbcTemplate.queryForObject(sql, Integer.class);
return cnt;
}
//批量添加
public void batchAdd(List<Object[]> batchList) {
String sql="insert into ticket (id,name,author) values(?,?,?)";
//批量添加 values (),(),() 对象这list的Object数组 o1,o2,o3
int[] ints=jdbcTemplate.batchUpdate(sql,batchList);
System.out.println(Arrays.toString(ints));
}
//批量删除
public void batchDelete(List<Object[]> batchList) {
String sql="delete from ticket where id=?";
int[] ints=jdbcTemplate.batchUpdate(sql,batchList);
System.out.println(Arrays.toString(ints));
}
//批量修改
public void batchUpdate(List<Object[]> batchList) {
String sql="update ticket set name=?,author=? where id=?";
int[] ints=jdbcTemplate.batchUpdate(sql,batchList);
System.out.println(Arrays.toString(ints));
}
}
(2)service层
给Service实现类注入dao,使用dao来完成操作
@Service("ticketService")
public class TicketServiceImpl implements TicketService{
@Autowired
TicketDao ticketDao;
public void add(Ticket ticket) {
ticketDao.add(ticket);
}
public void delete(int id) {
ticketDao.delete(id);
}
public Ticket query(int id) {
return ticketDao.query(id);
}
public List<Ticket> findAll() {
return ticketDao.findAll();
}
public void update(Ticket ticket) {
ticketDao.update(ticket);
}
public int getCount() {
return ticketDao.seleteCount();
}
public void batchAdd(List<Object[]> batchList) {
ticketDao.batchAdd(batchList);
}
public void batchDelete(List<Object[]> batchList) {
ticketDao.batchDelete(batchList);
}
public void batchUpdate(List<Object[]> batchList) {
ticketDao.batchUpdate(batchList);
}
}
2、不同查询
(1)普通查询
jdbcTemplate.queryForObject(
sql,
Integer.class //返回什么类型写什么
);
(2)对象查询
jdbcTemplate.queryForObject(
sql, //sql语句
new BeanPropertyRowMapper<Ticket>(Ticket.class), //RowMapper 查询的什么类型泛型写什么
id //sql参数
);
(3)集合查询
应用场景:查询分页
jdbcTemplate.query(
sql, //sql语句
new BeanPropertyRowMapper<Ticket>(Ticket.class)
);
//查询对象
public Ticket query(int id) {
String sql="select id ticketId,name ticketName,author from ticket where id=?";
Ticket ticket=jdbcTemplate.queryForObject(sql,new BeanPropertyRowMapper<Ticket>(Ticket.class),id);
return ticket;
}
//查询集合
public List<Ticket> findAll() {
String sql="select id ticketId,name ticketName,author from ticket";
List<Ticket> ticketList=jdbcTemplate.query(sql,new BeanPropertyRowMapper<Ticket>(Ticket.class));
return ticketList;
}
ApplicationContext context=new ClassPathXmlApplicationContext("bean2.xml");
Ticket ticket=new Ticket("3","砍僵尸","林正英");
TicketService ticketService = context.getBean("ticketService", TicketService.class);
int id=5;
Ticket ticket=ticketService.query(id);
java.lang.NoSuchMethodException
这个错误发现是实体类没有无参构造,无法映射
3.批量操作
(1)批量添加
//批量添加
public void batchAdd(List<Object[]> batchList) {
String sql="insert into ticket (id,name,author) values(?,?,?)";
//批量添加 values (),(),() 对象这list的Object数组 o1,o2,o3
int[] ints=jdbcTemplate.batchUpdate(sql,batchList);
System.out.println(Arrays.toString(ints));
}
List<Object[]> batchList=new ArrayList<Object[]>();
Object[] o1={"5","Web"};
Object[] o2={"6","大数据","2"};
Object[] o3={"7","中间件","3"};
batchList.add(o1);
batchList.add(o2);
batchList.add(o3);
ticketService.batchAdd(batchList);
(2)批量删除
//批量删除
public void batchDelete(List<Object[]> batchList) {
String sql="delete from ticket where id=?";
int[] ints=jdbcTemplate.batchUpdate(sql,batchList);
System.out.println(Arrays.toString(ints));
}
(3)批量修改
//批量修改
public void batchUpdate(List<Object[]> batchList) {
String sql="update ticket set name=?,author=? where id=?";
int[] ints=jdbcTemplate.batchUpdate(sql,batchList);
System.out.println(Arrays.toString(ints));
}
以上是关于Spring二刷笔记-JdbcTemplate的主要内容,如果未能解决你的问题,请参考以下文章
学习笔记——定义切面优先级 ;Spring中的JdbcTemplate;JdbcTemplate的常用API