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