Springboot集成mybatis与jsp
潮汐先生 人气:0什么是Spring Boot?
Spring Boot是一种全新的框架(相对而言),是用来简化Spring应用的初始搭建以及开发过程。该框架使用了特定的方式来进行配置。通过这种方式Spring Boot将在蓬勃发展的快速应用开发领域(rapid application development)成为领导者。
springboot特点
- 创建独立的Spring应用程序
- 嵌入的Tomcat,无需部署WAR文件
- 简化Maven配置
- 自动配置Spring
- 没有XML配置
springboot快速搭建项目
springboot的东西很多,其余的东西后面有机会再做补充吧。
今天主要以标题springboot集成mybatis与jsp为例演示springboot快速搭建项目
新建项目springboot_mybatis_jsp
这里我们目前只选一个web依赖,剩下的我们需要的时候再手动添加;
springboot的版本我们选择2.4.5,后面我们手动改成2.2.5.RELEASE。
最后我们点击Finish
。至此我们项目的初始化就完成了。
项目配置
配置项目目录
mapper目录的添加要注意是com/christy/mapper
,这里不要搞错了
配置工作目录(working directory)
这一步一定要做,否则无法访问到项目的jsp页面
第一步中点击下拉三角形选择Edit Configurations
第四步直接双击完后记得点击Apply
->OK
配置pom.xml
我们说了要实现springboot集成mybatis和jsp,所以首先要假如他们的依赖和相关依赖,这里放整个pom.xml内容
<?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> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.2.5.RELEASE</version> <relativePath/> <!-- lookup parent from repository --> </parent> <groupId>com.christy</groupId> <artifactId>springboot_mybatis_jsp</artifactId> <version>0.0.1-SNAPSHOT</version> <name>springboot_mybatis_jsp</name> <description>Demo project for Spring Boot</description> <properties> <java.version>1.8</java.version> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <!-- mybatis相关 --> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>2.1.2</version> </dependency> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> <version>1.1.12</version> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.38</version> </dependency> <!-- jsp相关 --> <dependency> <groupId>org.apache.tomcat.embed</groupId> <artifactId>tomcat-embed-jasper</artifactId> </dependency> <dependency> <groupId>jstl</groupId> <artifactId>jstl</artifactId> <version>1.2</version> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <configuration> <jvmArguments>-Dfile.encoding=UTF-8</jvmArguments> </configuration> </plugin> </plugins> </build> </project>
配置application.properties
server.port=8899 # 开启jso的自动编译 server.servlet.jsp.init-parameters.development=true # 配置视图解析器 spring.mvc.view.prefix=/ spring.mvc.view.suffix=.jsp # 编写mybatis相关配置 spring.datasource.type=com.alibaba.druid.pool.DruidDataSource spring.datasource.driver-class-name=com.mysql.jdbc.Driver spring.datasource.url=jdbc:mysql://localhost:3306/christy?characterEncoding=UTF-8 spring.datasource.username=root spring.datasource.password=123456 # 创建这个目录一定要使用 "/" mybatis.mapper-locations=classpath:com/christy/mapper/*.xml # 指定别名 mybatis.type-aliases-package=com.christy.model.entity # 开启日志 日志级别: off > error > warn > info > debug > all logging.level.root=info logging.level.com.christy.model.dao=debug logging.level.com.christy.controller=debug
编写代码
建表t_user
CREATE TABLE t_user ( id INT (6) PRIMARY KEY AUTO_INCREMENT, NAME VARCHAR (40), age INT (3), salary DOUBLE (7, 2) );
编写User.java
public class User { private Integer id; private String name; private Integer age; private Double salary; public User() { } public User(Integer id, String name, Integer age, Double salary) { this.id = id; this.name = name; this.age = age; this.salary = salary; } public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Integer getAge() { return age; } public void setAge(Integer age) { this.age = age; } public Double getSalary() { return salary; } public void setSalary(Double salary) { this.salary = salary; } @Override public String toString() { return "User{" + "id=" + id + ", name='" + name + '\'' + ", age=" + age + ", salary=" + salary + '}'; } } // 我们这里没有使用lombok
编写UserDao
@Mapper public interface UserDao { /** * 查询所有 * @author Christy * @date 2021/5/13 9:38 * @param * @return java.util.List<com.christy.model.entity.User> */ List<User> findAll(); /** * 添加用户信息 * @author Christy * @date 2021/5/13 9:38 * @param user * @return */ void save(User user); /** * 根据id查询用户 * @author Christy * @date 2021/5/13 9:39 * @param id * @return com.christy.model.entity.User */ User findById(Integer id); /** * 修改用户信息 * @author Christy * @date 2021/5/13 9:39 * @param user * @return void */ void update(User user); /** * 根据id删除用户 * @author Christy * @date 2021/5/13 9:39 * @param id * @return void */ void deleteById(Integer id); }
编写UserMapper.xml
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.christy.model.dao.UserDao"> <!--findAll--> <select id="findAll" resultType="com.christy.model.entity.User"> select id,name,age,salary from t_user </select> <!--save 采用数据库自动生成(useGeneratedKeys="true")并返回主键的值(keyProperty保存主键的属性名)--> <insert id="save" parameterType="com.christy.model.entity.User" useGeneratedKeys="true" keyProperty="id" > insert into t_user values(#{id},#{name},#{age},#{salary}) </insert> <!--findById--> <select id="findById" parameterType="Integer" resultType="com.christy.model.entity.User"> select id,name,age,salary from t_user where id = #{id} </select> <!--update--> <update id="update" parameterType="com.christy.model.entity.User"> update t_user set name=#{name}, age=#{age}, salary=#{salary} where id = #{id} </update> <!--deleteById--> <select id="deleteById" parameterType="Integer" > delete from t_user where id = #{id} </select> </mapper>
编写UserService.java、UserServiceImpl.java
public interface UserService { /** * 查询所有用户 * @author Christy * @date 2021/5/13 9:41 * @param * @return java.util.List<com.christy.model.entity.User> */ List<User> findAll(); /** * 保存用户信息 * @author Christy * @date 2021/5/13 9:42 * @param user * @return void */ void save(User user); /** * 根据id查询用户 * @author Christy * @date 2021/5/13 9:42 * @param id * @return com.christy.model.entity.User */ User findById(Integer id); /** * 修改用户信息 * @author Christy * @date 2021/5/13 9:42 * @param user * @return void */ void update(User user); /** * 根据id删除用户 * @author Christy * @date 2021/5/13 9:42 * @param id * @return void */ void deleteById(Integer id); }
/** * @Component注解 在工厂中创建对象 * @Controller @Service @Repository都继承自@Component注解, * 该三个注解将三层Controller,Service,Dao区别开来,其余地方如需要创建对象需要用Component * * @Transactional * 修饰范围: * 类:代表类中所有方法加入事务 * 方法: 代表当前方法加入事务 * propagation: 事务的传播属性 是指发生在多个业务层之间的事务传递 * 默认值:REQUIRED 需要事务,如果外部存在事务则融入事务,没有则开启事务 * REQUIRED_NEW:需要新事物 外部存在事务则事务挂起,自己创建新的事务 内部事务运行结束外部事物恢复(该传播属性常用于记录业务操作日志) * SUPPORTS:支持事务,外部存在事务则融入事务,没有也不开启 * 那么问题来了,查询方法上有必要加@Transactional(propagation = Propagation.SUPPORTS)? * 答:有必要。 * 举例:A.save(){ B.find*(){ C.update() }},这是个典型的A调用B,B调用C。对于A和C都是需要事务的,事务的传播属性都是默认值REQUIRED, * 如果此时B没有加事务,则A的事务无法传递到C,此时C的传播属性因为是默认的REQUIRED,所以C会开启一个新的事务。这时A和C分别处于不同的事务中 * * @author Christy * @date 2021/5/13 10:04 **/ @Service // 通知springboot扫描该注解 用来在工厂中创建对象 @Transactional // 控制事务 修饰范围: 类 方法 public class UserServiceImpl implements UserService { @Autowired private UserDao userDao; @Override @Transactional(propagation = Propagation.SUPPORTS) // propagation: 事务的传播属性 public List<User> findAll() { return userDao.findAll(); } @Override public void save(User user) { userDao.save(user); } @Override public User findById(Integer id) { return userDao.findById(id); } @Override public void update(User user) { userDao.update(user); } @Override public void deleteById(Integer id) { userDao.deleteById(id); } }
编写Controller
@Controller @RequestMapping("user") public class UserController { @Autowired private UserService userService; /** * 查询所有 * @author Christy * @date 2021/5/13 10:48 * @param request * @param model * @return java.lang.String */ @RequestMapping("findAll") public String findAll(HttpServletRequest request, Model model){ List<User> users = userService.findAll(); //保存到作用域 model.addAttribute("users",users); return "user_list"; } /** * 添加用户 * @author Christy * @date 2021/5/13 10:49 * @param name * @param user * @return java.lang.String */ @RequestMapping("save") public String save(String name,User user){ userService.save(user); return "redirect:/user/findAll"; } /** * 查询用户 * @author Christy * @date 2021/5/13 10:49 * @param id * @param model * @return java.lang.String */ @RequestMapping("findById") public String findById(Integer id,Model model){ User user = userService.findById(id); model.addAttribute("user",user); return "user_detail"; } /** * 修改用户信息 * @author Christy * @date 2021/5/13 10:50 * @param user * @return java.lang.String */ @RequestMapping("update") public String update(User user){ userService.update(user); return "redirect:/user/findAll"; } /** * 删除一个用户 * @author Christy * @date 2021/5/13 10:50 * @param id * @return java.lang.String */ @RequestMapping("deleteById") public String deleteById(Integer id){ userService.deleteById(id); return "redirect:/user/findAll"; } }
测试
我们启动项目,访问列表页面http://localhost:8899/user/findAll,然后按下图操作我们预编写的功能
以上就是Springboot集成mybatis与jsp过程详解的详细内容,更多关于Springboot集成的资料请关注其它相关文章!
加载全部内容