Spring框架+jdbcTemplate实现增删改查功能

网友投稿 272 2022-12-11

Spring框架+jdbcTemplate实现增删改查功能

SpringMVC架构(Model(实体类),Service,Controller层)

Controller(接收参数调用业务层)–>Service(调用持久层,处理业务逻辑)–>Dao(与数据库交互)

1. IOC(控制反转是一种设计思想而不是技术)

DI(依赖注入):是IOC思想的一种技术实现

IOC容器是Spring提供的保存Bean对象的容器

Bean管理操作

1.Xml + 注解

2.javaConfig + 注解

通过xml配置Bean:TODO:

通过javaConfig 配置Bean:TODO:

通过注解配置Bean:TODO:

2. AOP(面向切面)

面向切面的程序设计思想。横向的调用。

eg:一个日志的功能,很多的功能模块都需要去使用,可以写一个切面去做这个事情。

使用@Aspect来标记一个普通类为切面。

连接点:比如说日志需要作用的方法。

目标对象:日志需要使用的对象。

1. 添加依赖

org.springframework

spring-aop

5.3.8

org.aspectj

aspectjweaver

1.9.7

runtime

2.demo练习

需求:SpringIOC + JDBCTemplate实现简单的数据库操作

1.新建Maven项目并引入Spring核心4依赖

org.springframework

spring-context

5.3.1

org.springframework

spring-core

5.3.1

org.springframework

spring-beans

5.3.1

org.springframework

spring-exprhttp://ession

5.3.1

jdbc依赖

org.springframework

spring-jdbc

5.3.6

<!--mysql驱动-->

mysql

mysql-connector-java

5.1.47

junit5

org.junit.jupiter

junit-jupiter-api

5.3.2

test

2. 创建SpringConfig配置文件(通过JavaConfig方式注入bean)

创建SpringConfig类,添加@Configuration标记为配置类。

配置数据源和JDBCTemplate的Bean。

/**

* @author YonC

* @date 2021/9/2

*/

@Configuration

public class SpringConfig {

@Bean

public DataSource dataSource() {

MysqlDataSource dataSource = new MysqlDataSource();

dataSource.setUrl("jdbc:mysql://localhost:3306/test?useUnicode=ture&charactorEncoding=utf-8&serverTimezone=UTC");

dataSource.setUser("root");

dataSource.setPassword("123456");

return dataSource;

}

@Bean

public JdbcTemplate jdbcTemplate(DataSource dataSource) {

return new JdbcTemplate(dataSource);

}

}

3.创建MVC架构并创建与数据库字段对应的实体类对象

实体类:StudentPO

public class StudentPO {

private Long id;

private String name;

private String age;

public StudentPO() {

}

public StudentPO(String name, String age) {

this.name = name;

this.age = age;

}

public StudentPO(Long id, String name, String age) {

this.id = id;

this.name = name;

this.age = age;

}

public Long getId() {

return id;

}

public void setId(Long id) {

this.id = id;

}

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

public String getAge() {

return age;

}

public void setAge(String age) {

this.age = age;

}

@Override

public String toString() {

return "StudentPO{" +

"id=" + id +

", name='" + name + '\'' +

", age=" + age +

'}';

}

}

4. 编写Dao层

面向接口编程,首先定义Dao层的规范接口,定义了增删改查4种方法

/**

* @author YonC

* @date 2021/9/2

*/

public interface StudentDao {

void addStudent(StudentPO student);

void delStudentById(Long id);

void updateStudent(StudentPO student);

List selectStudent();

}

接口的实现

@Repository注解将StudentDao注入IOC容器

@Autowired自动装配JdbcTemplate对象,JdbcTemplate对象已经在SpringConfig文件中实例化

/**

* @author YonC

* @date 2021/9/2

*/

@Repository

public class StudentDaoImpl implements StudentDao {

@Autowired

JdbcTemplate jdbcTemplate;

/*

* 增加Student

* */

@Override

public void addStudent(StudentPO student) {

jdbcTemplate.update("insert into student (name,age) values (?,?)", student.getName(), student.getAge());

}

/*

* 删除Student

* */

@Override

public void delStudentById(Long id) {

jdbcTemplate.update("delete from student where id=?", id);

}

/*

* 修改Student

* */

@Override

public void updateStudent(StudentPO student) {

String sql = "UPDATE student SET name=?,age=? where id = ? ";

Object[] args = {student.getName(), student.getAge(), student.getId()};

jdbcTemplate.update(sql, args);

}

/*

* 查询

* */

@Override

public List selectStudent() {

String sql = "select id,name,age from student";

return this.jdbcTemplate.query(sql, (rs, index) -> {

StudentPO student = new StudentPO();

student.setId(rs.getLong("id"));

student.setName(rs.getString("name"));

student.setAge(rs.getString("age"));

return student;

});

}

}

5. Dao与数据库的增删改查已经实现,使用Service层去调用Dao层的方法。

首先定义Service层的接口

/**

* @author YonC

* @date 2021/9/2

*/

public interface StudentService {

void addStudent(StudentPO student);

void delStudentById(Long id);

void updateStudent(StudentPO student);

List selectStudent();

}

接口实现

@Service将对象声明IOC容器中

@Autowired自动装配IOC容器中的StudentDao将StudentDao对象初始化

/**

* @author YonC

* @date 2021/9/2

*/

@Service

public class StudentServiceImpl implements StudentService {

@Autowired

StudentDao studentDao;

@Override

public void addStudent(StudentPO student) {

studentDao.addStudent(student);

}

@Override

public void delStudentById(Long id) {

studentDao.delStudentById(id);

}

@Override

public void updateStudent(StudentPO student) {

studentDao.updateStudent(student);

}

@Override

public List selectStudent() {

return studentDao.selectStudent();

}

}

6. 使用Junit5单元测试测试

首先通过IOC容器拿到StudentService对象

private AnnotationConfigApplicationContext applicationContext = new AnnotationConfigApplicationContext(SpringConfig.class);

// 通过Spring的IOC容器

private StudentService studentService = applicationContext.getBean(StudentService.class);

测试

/**

* @author YonC

* @date 2021/9/2

*/

class StudentServiceImplTest {

private AnnotationConfigApplicationContext applicationContext = new AnnotationConfigApplicationContext(SpringConfig.class);

// 通过Spring的IOC容器

private StudentService studentService = applicationContext.getBean(StudentService.class);

@Test

public void testAddStudent() {

studentService.addStudent(new StudentPO("zahngsna", "999"));

System.out.println("添加成功!");

}

@Test

public void testDelStudent() {

studentService.delStudentById(3L);

System.out.println("删除成功!");

}

@Test

public void testUpdateStudent() {

//将id为3的Student的name修改为"wang",age修改为21

studentService.updateStudent(new StudentPO(1L,"wang","28"));

System.out.println("修改成功!");

}

@Test

public void testSelectStudent() {

studentService.selectStudent().forEach(System.out::println);

}

}

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:java迭代map的方式及迭代器原理
下一篇:一文搞懂JMeter engine中HashTree的配置问题
相关文章

 发表评论

暂时没有评论,来抢沙发吧~