超简单的Spring Cloud+Mybatis+jsp集成

    Spring Cloud项目默认是不支持jsp文件的,我们要想在项目中用到jsp,就需要增加相关依赖。本文中将进述通过两种形式来操作数据库(一种是通过注解,二是通过配置文件)来实现简单的增删改, 本项目使用的是JDK 1.8    spring boot版本是2.2.1。

一、通过注解操作数据库:

1、首先一个创建spring boot web工程(选择war) 如图:

增加如下依赖:

搭建完成后再增加jsp的相关依赖 如下:

<dependencies>
		<!-- spring mvc等依赖 -->
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
		</dependency>

		<!-- mybatis依赖包 -->
		<dependency>
			<groupId>org.mybatis.spring.boot</groupId>
			<artifactId>mybatis-spring-boot-starter</artifactId>
			<version>2.0.0</version>
		</dependency>

		<dependency>
			<groupId>mysql</groupId>
			<artifactId>mysql-connector-java</artifactId>
			<scope>runtime</scope>
		</dependency>
		<!-- end -->

		<!-- jsp依赖 -->
		<dependency>
			<groupId>org.apache.tomcat.embed</groupId>
			<artifactId>tomcat-embed-jasper</artifactId>
		</dependency>

		<dependency>
			<groupId>javax.servlet</groupId>
			<artifactId>javax.servlet-api</artifactId>
		</dependency>
		
		<dependency>
			<groupId>javax.servlet</groupId>
			<artifactId>jstl</artifactId>
		</dependency>
		
		<dependency>      
			<groupId>org.springframework.boot</groupId>      
			<artifactId>spring-boot-devtools</artifactId>   
		</dependency>
		<!-- end -->

		
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-tomcat</artifactId>
			<scope>provided</scope>
		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-test</artifactId>
			<scope>test</scope>
		</dependency>
		
	</dependencies>

以上工程的全部依赖都配置好了。

2、配置mysqldatasources在application.properties文件中:

server.port=8080


#jsp前后缀
spring.mvc.view.prefix=/WEB-INF/jsp/
spring.mvc.view.suffix=.jsp

#datascoure配置
spring.datasource.driverClassName =com.mysql.cj.jdbc.Driver
spring.datasource.url =jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf8&serverTimezone=UTC
spring.datasource.username =root
spring.datasource.password =root

#mapeer文件位置
mybatis.mapper-locations=classpath:/mapper/UserDao.xml

mvc:配置的就是视图的前缀和后缀

spring.datasource.driverClassName使用了最新的驱动名称:com.mysql.cj.jdbc.Driver。

url后面需要加上serverTimezone=UTC,mysql会自动提供给我们数据空间。

3、接一来创建pojo,mapper等对象,创建如下表结构:

CREATE TABLE `users` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(10) NOT NULL,
  `age` int(11) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=10 DEFAULT CHARSET=utf8;

创建工程目录如下:

4、pojo对象:


public class User implements Serializable{

	private Integer id;
	private String  name;
	private Integer  age;
	
	public User(Integer id, String name, Integer age) {
		super();
		this.id = id;
		this.name = name;
		this.age = age;
	}
	
	public User(String name, Integer age) {
		super();
		this.name = name;
		this.age = age;
	}



	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;
	}

	@Override
	public String toString() {
		return "User [id=" + id + ", name=" + name + ", age=" + age + "]";
	}
}

5、Mapeer对象:


@Mapper
public interface UserMapper {

	@Select("select * from users")
    @Results({
        @Result(property = "id",  column = "id", jdbcType=JdbcType.INTEGER),
        @Result(property = "name",  column = "name", jdbcType=JdbcType.VARCHAR),
        @Result(property = "age",  column = "age", jdbcType=JdbcType.INTEGER)
    })
	List<User> getAll();
	
	
	@Select("select * from users where id=#{id}")
    @Results({
        @Result(property = "id",  column = "id", jdbcType=JdbcType.INTEGER),
        @Result(property = "name",  column = "name", jdbcType=JdbcType.VARCHAR),
        @Result(property = "age",  column = "age", jdbcType=JdbcType.INTEGER)
    })
	User getOne(Integer id);
	
	
	//@Insert("INSERT INTO users(id,name,age) VALUES(#{id},#{name}, #{age})")
	@Insert("INSERT INTO users(name,age) VALUES(#{name}, #{age})")
	void insert(User user);
	
	@Update("update users set name=#{name},age=#{age} where id=#{id}")
	void update(User user);
	
	@Delete("delete from users where id=#{id}")
	void delete(Integer id);
}

6、增加control控制器:


//通过注解操作数据库
@Controller
public class UserControl {
	
	private List<User> list;
	
	@Autowired
	UserMapper userMapper;

	@RequestMapping("/add")
	public String welcome() {
		/*userMapper.insert(new User(1,"aa", 12));
		userMapper.insert(new User(2,"bb", 13));
		userMapper.insert(new User(3,"cc", 34));*/
		
		userMapper.insert(new User("aa", 12));
		userMapper.insert(new User("bb", 13));
		userMapper.insert(new User("cc", 34));
		
		return "index";
	}
	
	@RequestMapping("/getusers")
	public String getusers(Model model) {
		list=userMapper.getAll();
		System.out.println(list.toString());
		model.addAttribute("userlist", list);
		
		return "index";
	}
	
	@RequestMapping("/del/{id}")
	public String del(@PathVariable Integer id) {
		userMapper.delete(id);
		
		return "index";
	}
	
	@RequestMapping("/del/{id}/{name}")
	public String update(@PathVariable Integer id,@PathVariable String name) {
		User user=userMapper.getOne(id);
		user.setName(name);
		userMapper.update(user);
		
		return "index";
	}
}

7、将结果再通过jsp展示出来,以上将数据放到了model对象,将对象模型存入到key中jsp再取出:

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="ISO-8859-1">
<title>Insert title here</title>
</head>
<body style="text-align: center;">

<table border="1" style="width: 300px;height: 100px;margin: auto;">
	<tr>
		<th>学号</th>
		<th>姓名</th>
		<th>年龄</th>
	</tr>
	<c:forEach items="${userlist}" var="list">
	<tr style="text-align: center;">
		<td>${list.id}</td>
		<td>${list.name}</td>
		<td>${list.age}</td>
	</tr>
	</c:forEach>
</table>
</body>
</html>

项目运行再后面内容。

二、通过Xml文件操作数据库:

1、因为使用注解不需要services和dao层,但是xml这种需要,为了满足MVC模型,增加services包下增加:


@Service
public class UserServices {
	
	@Autowired
	UserDao dao;
	
	public List<User> getAll(){
		return dao.getAll();
	}
	
	public User getOne(Integer id) {
		return dao.getOne(id);
	}
	
	public void insert(User user) {
		dao.insert(user);
	}
	
	public void delete(Integer id) {
		dao.delete(id);
	}
	
	public void update(User user) {
		dao.update(user);
	}

}

2、在dao层增加如下:

@Mapper
public interface UserDao {

    List<User> getAll();
    
    User getOne(Integer id);
    
    void insert(User user);
    
    void update(User user);
    
    void delete(Integer id);
}

接下就是创建UserDao.xml文件 放在src/main/resources中,放其它路径也可以,但需要配置下路径,可以参考其它文档。在resources创建文件需要在build path创建之后再更换名称就可以了,如图:

4、增加userDao.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.example.demo.dao.UserDao" >
    <resultMap id="BaseResultMap" type="com.example.demo.pojo.User" >
        <id column="id" property="id" jdbcType="INTEGER" />
        <result column="name" property="name" jdbcType="VARCHAR" />
        <result column="age" property="age" jdbcType="INTEGER" />
    </resultMap>

    <sql id="Base_Column_List" > 
        id, name, age
    </sql>

    <select id="getAll" resultMap="BaseResultMap"  >
       SELECT 
       <include refid="Base_Column_List" />
       FROM users
    </select>

    <select id="getOne" parameterType="java.lang.Integer" resultMap="BaseResultMap" >
        SELECT 
       <include refid="Base_Column_List" />
       FROM users
       WHERE id = #{id}
    </select>

    <insert id="insert" parameterType="com.example.demo.pojo.User" >
       INSERT INTO 
            users
            (id,name,age) 
        VALUES
            (#{id}, #{name}, #{age})
    </insert>

    <update id="update" parameterType="com.example.demo.pojo.User" >
       UPDATE 
            users 
       SET 
        <if test="name != null">name = #{name},</if>
        <if test="age != null">age = #{age},</if>
       WHERE 
            id = #{id}
    </update>

    <delete id="delete" parameterType="java.lang.Integer" >
       DELETE FROM
             users 
       WHERE 
             id =#{id}
    </delete>
</mapper>

前面在application.properties中指定了xml的位置,所以可以扫描到文件 如下:

#mapeer文件位置
mybatis.mapper-locations=classpath:/mapper/UserDao.xml

5、在control中增加一个控制类UserXmlControl:


//通过xml文件配置操作数据库
@Controller
public class UserXmlControl {
	
	private List<User> list;
	
	@Autowired
	UserServices services;

	@RequestMapping("/addXml")
	public String welcome() {
		/*services.insert(new User(1,"aa", 12));
		services.insert(new User(2,"bb", 13));
		services.insert(new User(3,"cc", 34));*/
		
		services.insert(new User("aa", 12));
		services.insert(new User("bb", 13));
		services.insert(new User("cc", 34));
		
		return "index";
	}
	
	@RequestMapping("/getusersXml")
	public String getusers(Model model) {
		list=services.getAll();
		System.out.println(list.toString());
		model.addAttribute("userlist", list);
		
		return "index";
	}
	
	@RequestMapping("/delXml/{id}")
	public String del(@PathVariable Integer id) {
		services.delete(id);
		
		return "index";
	}
	
	@RequestMapping("/delXml/{id}/{name}")
	public String update(@PathVariable Integer id,@PathVariable String name) {
		User user=services.getOne(id);
		user.setName(name);
		services.update(user);
		
		return "index";
	}
}

jsp已经写过了,运行项目 ->将入项目放到tomcat当中   因为是war工程需要在url增加项目名:

首先运行:http://localhost:8080/spring-cloud-mybatis-jsp/add  做增加数据操作,

再运行查看:http://localhost:8080/spring-cloud-mybatis-jsp/getusers

这种是通过注解来操作数据库。

接下来通过xml来操作;

访问:http://localhost:8080/spring-cloud-mybatis-jsp/addXml 来增加数据

读取数据:http://localhost:8080/spring-cloud-mybatis-jsp/getusersXml 

 数据成功增加以上就是通过注解和XML两种形式来操作数据库。

项目思考:

1、可以看到工程为什么都是基于com.example.demo包下,如果需要自定义包就需要进行加载,可以参考

微服务架构Spring Boot运行原理 这篇文章。

2、UserDao中的方法是与UserDao.xml中的id 一一对应的,其中insert,update,delete都是不需要返回所以都是void类型,@Mapper注解会将UserDao转换为一个xml的数据对象。

@Mapper
public interface UserDao {

    List<User> getAll();
    
    User getOne(Integer id);
    
    void insert(User user);
    
    void update(User user);
    
    void delete(Integer id);
}

3、将项目放入tomcat中如果提示版本过高需要在spring-cloud-mybatis-jsp工程目录下\.settings\org.eclipse.wst.common.project.facet.core.xml修改,将<installed facet="jst.web" version="3.0"/> 修改成向下一级<installed facet="jst.web" version="2.0"/> 就可以了

<?xml version="1.0" encoding="UTF-8"?>
<faceted-project>
  <fixed facet="wst.jsdt.web"/>
  <installed facet="java" version="1.8"/>
  <installed facet="jst.web" version="3.0"/>
  <installed facet="wst.jsdt.web" version="1.0"/>
</faceted-project>

4、项目中如果提示这样的一些错误:

org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): com.example.demo.dao.UserDao.getAll

可能就是你的文件或者类没有扫描,可以用我的项目代码参考。

代码我放在git上面地址为: https://github.com/lookloop21/Spring-Boot-Rersource  名为:spring-cloud-mybatis-jsp

项目过程中有什么问题可以在下方留言。 

猜你喜欢

转载自blog.csdn.net/looplook21/article/details/86632478