当前位置:   article > 正文

spring操作数据库

spring操作数据库

xml版

程序结构

配置文件

dbUtil-阿帕奇提供操作数据库的插件

核心类:QueryRunner

.query() 查询

.update() 增删改

  1. <dependencies>
  2. <!-- spring -->
  3. <dependency>
  4. <groupId>org.springframework</groupId>
  5. <artifactId>spring-context</artifactId>
  6. <version>5.3.27</version>
  7. </dependency>
  8. <!-- 单元测试 -->
  9. <dependency>
  10. <groupId>junit</groupId>
  11. <artifactId>junit</artifactId>
  12. <version>4.12</version>
  13. <scope>test</scope>
  14. </dependency>
  15. <!-- spring测试包 -->
  16. <dependency>
  17. <groupId>org.springframework</groupId>
  18. <artifactId>spring-test</artifactId>
  19. <version>5.3.27</version>
  20. </dependency>
  21. <!-- dbutil -->
  22. <dependency>
  23. <groupId>commons-dbutils</groupId>
  24. <artifactId>commons-dbutils</artifactId>
  25. <version>1.4</version>
  26. </dependency>
  27. <!-- mysql -->
  28. <dependency>
  29. <groupId>mysql</groupId>
  30. <artifactId>mysql-connector-java</artifactId>
  31. <version>8.0.28</version>
  32. </dependency>
  33. <!-- 数据源 -->
  34. <dependency>
  35. <groupId>c3p0</groupId>
  36. <artifactId>c3p0</artifactId>
  37. <version>0.9.1.2</version>
  38. </dependency>
  39. <!-- lombok -->
  40. <dependency>
  41. <groupId>org.projectlombok</groupId>
  42. <artifactId>lombok</artifactId>
  43. <version>1.18.26</version>
  44. </dependency>
  45. </dependencies>

实体类

实现Serializable接口

lombok插件

功能:对实体类自动,动态生成getset,无参有参.....

步骤:

1.idea安装插件(只做一次)

2.添加坐标

3.编写注解

  1. @NoArgsConstructor
  2. @AllArgsConstructor
  3. @Data

dao

配坐标 数据注入(set)

接口:

  1. public void save(Account account);
  2. public Account findByName(String name);
  3. public List<Account> findAll();
  4. public void updateById(Account account);
  5. public void deleteById(int id);

类:sql语句,继承接口

  1. //操作数据库的核心类
  2. QueryRunner queryRunner;
  3. public void setQueryRunner(QueryRunner queryRunner) {
  4. this.queryRunner = queryRunner;
  5. }
  6. @Override
  7. public void save(Account account) {
  8. try {
  9. queryRunner.update("insert into test(aname,amoney) value (?,?)",account.getAname(),account.getAmoney());
  10. } catch (SQLException throwables) {
  11. throwables.printStackTrace();
  12. }
  13. }

service

类:获取dao层数据

  1. IAccountMapper mapper;
  2. public void setMapper(IAccountMapper mapper) {
  3. this.mapper = mapper;
  4. }
  5. @Override
  6. public void save(Account account) {
  7. mapper.save(account);
  8. }

controller

类:获取service层数据

  1. public void setService(IAccountService service) {
  2. this.service = service;
  3. }
  4. @Override
  5. public void save(Account account) {
  6. service.save(account);
  7. }

applicationContext.xml

链接数据库,层层传递数据

  1. <!-- 加载资源文件-->
  2. <context:property-placeholder location="classpath:jdbc.properties"/>
  3. <!-- 注入数据源-->
  4. <bean id="dateSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
  5. <property name="driverClass" value="${msg1}"/>
  6. <property name="jdbcUrl" value="${msg2}"/>
  7. <property name="user" value="${msg3}"/>
  8. <property name="password" value="${msg4}"/>
  9. </bean>
  10. <!-- 注入QueryRunner-->
  11. <bean id="queryRunner" class="org.apache.commons.dbutils.QueryRunner">
  12. <constructor-arg name="ds" ref="dateSource"/>
  13. </bean>
  14. <!-- 注入dao-->
  15. <bean id="mapperImp" class="com.zhe.dao.AccountMapperImp">
  16. <property name="queryRunner" ref="queryRunner"/>
  17. </bean>
  18. <!-- 注入service-->
  19. <bean id="service" class="com.zhe.service.AccountServiceImp">
  20. <property name="mapper" ref="mapperImp"/>
  21. </bean>
  22. <!-- 注入controller-->
  23. <bean id="controller" class="com.zhe.controller.AccountControllerImp">
  24. <property name="service" ref="service"/>
  25. </bean>

junit测试

使用步骤:

1.坐标

2.注解(修饰方法)

@Test======>可以运行的方法

@Before====>@Test运行之前

@After=====>@Test运行之后

  1. ClassPathXmlApplicationContext applicationContext=null;
  2. IAccountController controller=null;
  3. @Before //test前调用
  4. public void beforMethod(){
  5. applicationContext=new ClassPathXmlApplicationContext("applicationContext.xml");
  6. controller=(IAccountController)applicationContext.getBean("controller");
  7. }
  8. @After//test后调用
  9. public void afterMethod(){
  10. applicationContext.close();
  11. }
  12. @Test
  13. public void show1(){
  14. controller.save(new Account("小李",2000));
  15. controller.save(new Account("大李",2000));
  16. }
  17. @Test
  18. public void show2(){
  19. List<Account> all=controller.findAll();
  20. for (int i=0;i<all.size();i++){
  21. Account account=all.get(i);
  22. System.out.println(account);
  23. }
  24. }

ann注解版

xml

将三层数据注入换为扫描

  1. <!-- 扫描-->
  2. <context:component-scan base-package="com.zhe"/>

dao

加@Repository标签,set方法换为@Autowired标签

  1. @Repository
  2. public class AccountMapperImp implements IAccountMapper{
  3. //操作数据库的核心类
  4. @Autowired
  5. QueryRunner queryRunner;

service

  1. @Service
  2. public class AccountServiceImp implements IAccountService{
  3. @Autowired
  4. IAccountMapper mapper;

controller

  1. @Controller("controller")
  2. public class AccountControllerImp implements IAccountController {
  3. @Autowired
  4. IAccountService service;

配置类版

添加config包

ApplicationConfig类

  1. @Configuration//配置类注解
  2. @ComponentScan(basePackages = "com.zhe")//氛围
  3. @Import(DataConfig.class)//连接注解
  4. public class ApplicationConfig {
  5. }

DataConfig类

连接配置文件

  1. @Configuration//配置类注解
  2. @PropertySource(value = "classpath:jdbc.properties")//加载配置文件
  3. public class DataConfig {
  4. @Value("${msg1}")
  5. private String driverClass;
  6. @Value("${msg2}")
  7. private String jdbcUrl;
  8. @Value("${msg3}")
  9. private String user;
  10. @Value("${msg4}")
  11. private String password;
  12. @Bean
  13. public DataSource dataSource(){
  14. try {
  15. ComboPooledDataSource comboPooledDataSource = new ComboPooledDataSource();
  16. comboPooledDataSource.setDriverClass(driverClass);
  17. comboPooledDataSource.setJdbcUrl(jdbcUrl);
  18. comboPooledDataSource.setUser(user);
  19. comboPooledDataSource.setPassword(password);
  20. return comboPooledDataSource;
  21. } catch (PropertyVetoException e) {
  22. e.printStackTrace();
  23. }
  24. return null;
  25. }
  26. @Bean
  27. public QueryRunner queryRunner(){
  28. return new QueryRunner(dataSource());
  29. }
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家小花儿/article/detail/975923
推荐阅读
相关标签
  

闽ICP备14008679号