springboot--集成jsp,mybatis,事务,视图解析器

springboot–集成

springboot–集成jsp

springboot推荐的前端引擎是thymeleaf,集成jsp需要添加一些依赖:

<!--引入springboot内嵌Tomcat对jsp的解析依赖,不添加解析不了jsp
			仅仅只是展示jsp页面,只添加以下一个依赖
		-->
		<dependency>
			<groupId>org.apache.tomcat.embed</groupId>
			<artifactId>tomcat-embed-jasper</artifactId>
		</dependency>

还需要添加插件,使得springboot对jsp进行编译:

<!--
			springboot项目默认推荐的前端引擎是thymeleaf
			现在我们要使用springboot集成jsp,手动指定jsp最后编译的路径
			而且springboot集成jsp编译jsp的路径是springboot规定好的位置
			META-INF/resources
		-->
		<resources>
			<resource>
				<!--源文件夹-->
				<directory>src/main/webapp</directory>
				<!--指定编译到META-INF/resources-->
				<targetPath>META-INF/resources</targetPath>
				<!--指定源文件夹的哪些资源要编译进去-->
				 <includes>
					 <include>*.*</include>
				 </includes>
			</resource>
		</resources>

类似springmvc需要配置视图解析器,在主核心配置文件中配置:

#配置视图解析器
spring.mvc.view.prefix=/
spring.mvc.view.suffix=.jsp

配置完毕后,可以写一个控制类和jsp页面进行测试:

@Controller
public class IndexController {

    @RequestMapping(value = "/say")
    public ModelAndView say(){
        ModelAndView mv = new ModelAndView();
        mv.addObject("msg", "hello springboot");
        mv.setViewName("say");
        return mv;
    }
}

springboot–集成mybatis

需要添加两个依赖:

<!--mysql驱动-->
		<dependency>
			<groupId>mysql</groupId>
			<artifactId>mysql-connector-java</artifactId>
		</dependency>

		<!--mybatis整合springboot框架的起步依赖-->
		<dependency>
			<groupId>org.mybatis.spring.boot</groupId>
			<artifactId>mybatis-spring-boot-starter</artifactId>
			<version>2.0.0</version>
		</dependency>

使用mybatis提供的逆向工程生成实体bean,mapper映射文件和dao接口。先创建出数据库。

mybatis逆向工程

1.首先创建数据库表
2.在pom文件中加入mybatis自动生成插件:

<!--mybatis 代码自动生成插件-->
			<plugin>
				<groupId>org.mybatis.generator</groupId>
				<artifactId>mybatis-generator-maven-plugin</artifactId>
				<version>1.3.6</version>
				<configuration>
					<!--配置文件的位置-->
					<configurationFile>GeneratorMapper.xml</configurationFile>
					<verbose>true</verbose>
					<overwrite>true</overwrite>
				</configuration>
			</plugin>

3.在与pom文件同级,项目下面写配置文件(GeneratorMapper.xml):

<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE generatorConfiguration PUBLIC
        "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN"
        "http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd">
        <!--上面这个地址爆红是正常的。-->
<generatorConfiguration>
    <!--数据库驱动 -->
    <properties resource="jdbc.properties" />

    <!--指定连接数据库的JDBC驱动包所在的位置,指定到你本机的完整路径-->
    <classPathEntry location="D:\mysql-connector-java-5.1.9.jar"/>

    <!-- 用户相关,配置tables表信息内容体,targetRuntime指定采用MyBatis3的版本 -->
    <context id="tables" targetRuntime="MyBatis3">
        <!-- 是否去除自动生成的注释 true:是 : false:否 -->
        <commentGenerator>
            <property name="suppressAllComments" value="true"/>
        </commentGenerator>
        <!-- 数据库连接-->
        <jdbcConnection driverClass="${jdbc.driverClassName}"
                        connectionURL="${jdbc.url}"
                        userId= "${jdbc.username}"
                        password= "${jdbc.password}">
        </jdbcConnection>

        <!-- 默认false,把JDBC DECIMAL 和 NUMERIC 类型解析为 Integer,为 true时把JDBC DECIMAL 和
           NUMERIC 类型解析为java.math.BigDecimal -->
        <javaTypeResolver >
            <property name="forceBigDecimals" value="false" />
        </javaTypeResolver>

        <!--指定javaBean生成的位置 javaBean生成的位置,targetPackage指的是bean类存放的包名
            targetProject指的是生成的bean类放到哪个工程下面-->
        <javaModelGenerator targetPackage="com.model" targetProject="src/main/java">
            <!-- enableSubPackages:是否让schema作为包的后缀 -->
            <property name="enableSubPackages" value="true" />
            <!-- 从数据库返回的值被清理前后的空格 -->
            <property name="trimStrings" value="true" />
        </javaModelGenerator>

        <!--sql映射文件生成的位置,targetPackage指的是mapper.xml文件存放的包名
            targetProject指的是生成的mapper.xml文件放到哪个工程下面-->
        <sqlMapGenerator targetPackage="com.mapper"  targetProject="src/main/java">
            <property name="enableSubPackages" value="true" />
        </sqlMapGenerator>

        <!--指定dao接口生成的位置,targetPackage指的是dao接口存放的包名
            targetProject指的是生成的dao接口放到哪个工程下面-->
        <javaClientGenerator type="XMLMAPPER" targetPackage="com.mapper"  targetProject="src/main/java">
            <property name="enableSubPackages" value="true" />
        </javaClientGenerator>

        <!--tableName表示你的数据库表,domainObjectName这个表示你要生成的对应的java类的名字-->
        <table tableName="student" domainObjectName="Student"/>

    </context>
</generatorConfiguration>

4.在resources资源文件里面创建数据库连接配置文件(jdbc.properties)

jdbc.driverClassName=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/ssm
jdbc.username=root
jdbc.password=123456789qw

5.一切配置完毕后,在maven的插件管理中启动逆向工程:
在这里插入图片描述

使用mybatis逆向生成的代码进行增删查改:

文件的项目框架:在这里插入图片描述
使用mybatis逆向工程,会生成以下文件
在这里插入图片描述
1.介绍一下StudentMapper接口,注意要加入@Mapper注解,才能创建dao对象,才能放入到spring容器中,才能被自动注入到Service类中:

package com.mapper;

import com.model.Student;
import com.model.StudentExample;
import org.apache.ibatis.annotations.Mapper;

import java.util.List;

@Mapper //这个注解会创建Dao对象到spring容器,类似getmapper
public interface StudentMapper {
    long countByExample(StudentExample example);

    int deleteByExample(StudentExample example);

    int deleteByPrimaryKey(Integer id);

    int insert(Student record);

    int insertSelective(Student record);

    List<Student> selectByExample(StudentExample example);

    Student selectByPrimaryKey(Integer id);

    int updateByPrimaryKeySelective(Student record);

    int updateByPrimaryKey(Student record);
}

这里面的又四类方法,覆盖了增删改查,但是有六种方法,以ive结尾的方法是选择性的,打个比方,就是你先注册一个用户,只需要先填姓名和身份证号码就行了,家庭住址可以先不用填。如果是insert方法就要先全部填完,所以iv结尾的方法使用的频率比较高。
我们这里还是用了@Mapper注解,这个注解就是创建dao对象,并将对象交给spring容器进行管理,这样才能注入到service方法中,类似于getmapper方法。
2.需要在pom文件中加入资源插件,否则在target文件中无法找到mapper映射文件:

<!--手动指定文件夹为resources-->
		<resources>
			<resource>
				<!--
				java文件夹下面的子包里面的xml都要进行编译,
				这样mapper文件才会被加载到target文件夹中去
				-->
				<directory>src/main/java</directory>
				<includes>
					<include>**/*.xml</include>
				</includes>
			</resource>
		</resources>

3.还需要配置著配置文件,里面加入连接数据库的设置:


server.port=8080

server.servlet.context-path=/

#设置连接数据库的设置
#mysql的8版本的驱动是com.mysql.cj.jdbc.Driver,8之前的驱动是com.mysql.jdbc.Driver

spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/ssm
spring.datasource.username=root
spring.datasource.password=123456789qw

4.创建StudentService接口和实现类,使用@Service,@Resource注解,接口代码就不放上去了,太基础了

package com.service.impl;

import com.mapper.StudentMapper;
import com.model.Student;
import com.service.StudentService;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;

@Service
public class StudentServiceImpl implements StudentService {

    @Resource
    private StudentMapper studentMapper;


    @Override
    public Student queryStudentById(Integer id) {
        return studentMapper.selectByPrimaryKey(id);
    }
}

5.写一个Controller类(StudentController),注入studentService:

package com.web;

import com.mapper.StudentMapper;
import com.model.Student;
import com.service.StudentService;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

import javax.annotation.Resource;

@Controller
public class StudentController {

    @Resource
        private StudentService studentService;

    @RequestMapping(value = "/student")
    @ResponseBody
    public Object student(Integer id){

       Student student =  studentService.queryStudentById(id);

        return student;
    }
}

对上述例子进行升级,逆向生成的StudentMapper接口上面无需加入@Mapper注解,我们在启动类Application里面加入@MapperScan注解开启注解扫描

package com;

import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication//开启spring配置
/*
* 开启扫描Mapper接口的包以及子包
* 不用在每个接口单独加@Mapper注解
* */
@MapperScan(basePackages = "com.mapper")
public class Application {

	public static void main(String[] args) {
		SpringApplication.run(Application.class, args);
	}
}

mybatis规定mapper文件和dao接口必须放在同一个目录下,但是还有另外一种方法。

在resources文件夹下面s创建一个mapper文件夹,将mapper文件全部放入到这个文件夹中,resources文件夹下面的文件全部会被编译到target文件夹里面,所以我们不需要在pom文件夹里面加入资源编译代码。但是我们还需要在主核心配置文件中指定mybatis映射文件的位置。


server.port=8080

server.servlet.context-path=/

#设置连接数据库的设置
#mysql的8版本的驱动是com.mysql.cj.jdbc.Driver,8之前的驱动是com.mysql.jdbc.Driver
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/ssm
spring.datasource.username=root
spring.datasource.password=123456789qw
        
#指定Mybatis映射文件的路径
mybatis.mapper-locations=classpath:mapper/*.xml

在这里插入图片描述

springboot使用事务

springboot开启事务很简单,只需要加入一个注解@Transactional 。
下面是代码示例:

package com.servcie.impl;

import com.mapper.StudentMapper;
import com.model.Student;
import com.servcie.StudentService;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import javax.annotation.Resource;

@Service
public class StudentServiceImpl implements StudentService {

    @Resource
    private StudentMapper studentMapper;

    @Transactional //开启事务
    @Override
    public int updateStudentById(Student student) {

        //修改成功
        int i = studentMapper.updateByPrimaryKeySelective(student);

        //修改失败
        int a = 10/0;

        return i;
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值