smm整合
配置整合
这个里面SpringConfig 就是书写Spring的配置类,其中加载了jdbc配置类和mybatis配置类,还加载了jdbc资源类。
package com.itheima.config; import org.springframework.context.annotation.*; import org.springframework.transaction.annotation.EnableTransactionManagement; @Configuration @ComponentScan({"com.itheima.service"}) @PropertySource("classpath:jdbc.properties") @Import({JdbcConfig.class,MybatisConfig.class}) @EnableTransactionManagement public class SpringConfig { }
ServletConfig主要是整合了Spring的配置,以及SpringMvc表现层的东西。
package com.itheima.config; import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer; public class ServletConfig extends AbstractAnnotationConfigDispatcherServletInitializer { @Override protected Class<?>[] getRootConfigClasses() { return new Class[]{SpringConfig.class}; } @Override protected Class<?>[] getServletConfigClasses() { return new Class[]{SpringMvcConfig.class}; } @Override protected String[] getServletMappings() { return new String[]{"/"}; } }
JdbcConfig就是把数据库连接进行加载:
package com.itheima.config; import com.alibaba.druid.pool.DruidDataSource; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Bean; import org.springframework.jdbc.datasource.DataSourceTransactionManager; import org.springframework.transaction.PlatformTransactionManager; import javax.sql.DataSource; public class JdbcConfig { @Value("${jdbc.driver}") private String driver; @Value("${jdbc.url}") private String url; @Value("${jdbc.username}") private String username; @Value("${jdbc.password}") private String password; @Bean public DruidDataSource dataSource(){ DruidDataSource dataSource = new DruidDataSource(); dataSource.setDriverClassName(driver); dataSource.setUrl(url); dataSource.setUsername(username); dataSource.setPassword(password); return dataSource; } @Bean public PlatformTransactionManager transactionManager(DataSource dataSource){ DataSourceTransactionManager ds = new DataSourceTransactionManager(); ds.setDataSource(dataSource); return ds; } }
功能:
dao层:书写sql语句
package com.itheima.dao; import com.itheima.domin.Book; import org.apache.ibatis.annotations.Delete; import org.apache.ibatis.annotations.Insert; import org.apache.ibatis.annotations.Select; import org.apache.ibatis.annotations.Update; import java.util.List; public interface BookDao { @Insert("insert into tbl_book values(#{id},#{type},#{name},#{description})") public boolean save(Book book); @Update("update tbl_book set type=#{type},name=#{name},description=#{description} where id=#{id}") public boolean update(Book book); @Delete("delete from tbl_book where id=#{id}") public boolean delete(int id); @Select("select * from tbl_book where id=#{id}") public Book getById(int id); @Select("select * from tbl_book") public List<Book> getAll(); }
service层:服务
package com.itheima.service.impl; import com.itheima.dao.BookDao; import com.itheima.domin.Book; import com.itheima.service.BookService; import org.apache.ibatis.annotations.Delete; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.util.List; @Service public class BookServiceImpl implements BookService { @Autowired private BookDao bookDao; public BookServiceImpl(BookDao bookDao) { this.bookDao = bookDao; } @Override public boolean save(Book book) { return bookDao.save(book); } @Override public boolean update(Book book) { return bookDao.update(book); } @Override public boolean delete(int id) { return bookDao.delete(id); } @Override public Book getById(int id) { return bookDao.getById(id); } @Override public List<Book> getAll() { return bookDao.getAll(); } }
package com.itheima.service; import com.itheima.domin.Book; import org.springframework.transaction.annotation.Transactional; import java.util.List; @Transactional public interface BookService { public boolean save(Book book); public boolean update(Book book); public boolean delete(int id); public Book getById(int id); public List<Book> getAll(); }
controller层:实现逻辑
package com.itheima.controller; import com.itheima.dao.BookDao; import com.itheima.domin.Book; import com.itheima.service.BookService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; import java.util.List; @RestController @RequestMapping("/books") public class BookController { @Autowired private BookService bookService; @PostMapping public Result save(@RequestBody Book book) { boolean flag = bookService.save(book); return new Result(flag,flag?Code.SAVE_OK:Code.SAVE_ERR); } @PutMapping public Result update(@RequestBody Book book) { boolean flag = bookService.update(book); return new Result(flag,flag?Code.UPDATE_OK:Code.UPDATE_ERR); } @DeleteMapping("/{id}") public Result delete(@PathVariable int id) { boolean flag = bookService.delete(id); return new Result(flag,flag?Code.DELETE_OK:Code.DELETE_ERR); } @GetMapping("/{id}") public Result getById(@PathVariable int id) { Book book = bookService.getById(id); Integer code = book!=null?Code.GET_OK:Code.GET_ERR; return new Result(book,code); } @GetMapping public Result getAll() { List<Book> bookList = bookService.getAll(); Integer code = bookList!=null?Code.GET_OK:Code.GET_ERR; String msg = bookList!=null?"查询成功":"查询失败,请重试"; return new Result(msg,bookList,code); } }
结果集的封装:
package com.itheima.controller; public class Code { public static final Integer SAVE_OK=20011; public static final Integer DELETE_OK=20021; public static final Integer UPDATE_OK=20031; public static final Integer GET_OK=20041; public static final Integer SAVE_ERR=20010; public static final Integer DELETE_ERR=20020; public static final Integer UPDATE_ERR=20030; public static final Integer GET_ERR=20040; }
package com.itheima.controller; public class Result { private String msg; private Object data; private Integer code; public Result(Object data, Integer code) { this.data = data; this.code = code; } public Result(String msg, Object data) { this.msg = msg; this.data = data; } public Result(Integer code) { this.code = code; } public Result(Object data) { this.data = data; } public Result(String msg) { this.msg = msg; } public Result(String msg, Object data, Integer code) { this.msg = msg; this.data = data; this.code = code; } public Result() { } public String getMsg() { return msg; } public void setMsg(String msg) { this.msg = msg; } public Object getData() { return data; } public void setData(Object data) { this.data = data; } public Integer getCode() { return code; } public void setCode(Integer code) { this.code = code; } }
以上就是具体的一些操作。
pom.xml文件
srping-webmvc:spring整合前端
spring-jdbc:spring整合数据库
spring-test:spring整合测试类
mybatis:mybatis框架
mysql-connector-java:mysql数据库
druid:阿里巴巴开发的druid数据源,用来连接数据库
servlet:这里要加<scope>标签,因为这个会跟tomcat产生冲突
jackson-databind:传输json数据
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.example</groupId> <artifactId>spring_01</artifactId> <version>1.0-SNAPSHOT</version> <packaging>war</packaging> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <maven.compiler.target>1.8</maven.compiler.target> <maven.compiler.source>1.8</maven.compiler.source> <junit.version>5.8.2</junit.version> </properties> <dependencies> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>5.2.10.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-jdbc</artifactId> <version>5.2.10.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-test</artifactId> <version>5.2.10.RELEASE</version> </dependency> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.5.6</version> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.31</version> </dependency> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> <version>1.0.29</version> </dependency> <dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> <version>4.0.1</version> <scope>provided</scope> </dependency> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis-spring</artifactId> <version>1.3.1</version> </dependency> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>2.12.7.1</version> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> <scope>test</scope> </dependency> </dependencies> <build> <plugins> <!-- tomcat7插件 maven 命令 tomcat7:run 启动项目--> <plugin> <groupId>org.apache.tomcat.maven</groupId> <artifactId>tomcat7-maven-plugin</artifactId> <version>2.1</version> <configuration> <port>8080</port> <path>/</path> </configuration> </plugin> </plugins> </build> </project>
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理