摘要:
学习了(一)同学;那么也就会搭建属于自己的项目了;可能还要许多的原理不是很清楚;但是最终的总结就是首先mvc模式是没有变的;少得就是配置文件xml;springboot都以java类形式代替了xml;其原理分析一下;之前的ssm的spring和springmvc以及mybatis配置文件由自己写好;其中spring和springmvc交给web.xml配置上去初始化一下;而现在springboot是基于springmvc的;内置会自动配置;WebMvcAutoConfiguration是SpringMVC的自动配置类;ApplicationContextInitializer会自动配置spring。那么接下来就是连接自己的数据库操作了。
加载数据库整合MyBatis
- 首先就得加载所需要的包了:
我就加入了这几个包;想必大家对他们都熟悉不过了;之前的ssm框架都是自己写上配置文件;比如在spring中连接数据库的信息配置以及mybatis的配置文件;现在springboot都是自带自动配置;所以我们也就将它们的数据重新初始化我们自己的;比如:
server.port=8080
mybatis.typeAliasesPackage=com.lp.demo.**.domain
mybatis.mapperLocations=classpath*:mybatisMapper/*.xml
mybatis.config-location=classpath:MyBatis-Configuration.xml
spring.datasource.name=lp
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/book?useUnicode=true&characterEncoding=UTF-8&allowMultiQueries=true&serverTimezone=Asia/Shanghai
spring.datasource.username=root
spring.datasource.password=root
#前缀,也就是模板存放的路径
spring.thymeleaf.prefix=classpath:/templates/
#编码格式
spring.thymeleaf.encoding=UTF-8
#后缀
spring.thymeleaf.suffix=.html
springboot内置的初始类都会自动读取到这里我所配置的信息。
小总结:从这里我想说的是;既然springboot内置许多的自动初始化类;并且是自动可以读取到properties(yml)所配置的属性值;所以说以后的配置就轻松了;除了不是springboot自带启动的;那么这个思路是了解springboot的核心所在。
当然配置的文件有些还是得自己写;内容中的MyBatis-Configuration.xml就是自己写;这个是关于mybatis框架配置;而跟springboot只能说是整合;所以各自都有自己的配置文件。MyBatis-Configuration.xml如下:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<settings>
<!-- 全局映射器启用缓存 -->
<setting name="cacheEnabled" value="true" />
<!-- 查询时,关闭关联对象即时加载以提高性能 -->
<setting name="lazyLoadingEnabled" value="true" />
<!-- 设置关联对象加载的形态,此处为按需加载字段(加载字段由SQL指 定),不会加载关联表的所有字段,以提高性能 -->
<setting name="aggressiveLazyLoading" value="false" />
<!-- 对于未知的SQL查询,允许返回不同的结果集以达到通用的效果 -->
<setting name="multipleResultSetsEnabled" value="true" />
<!-- 允许使用列标签代替列名 -->
<setting name="useColumnLabel" value="true" />
<!-- 允许使用自定义的主键值(比如由程序生成的UUID 32位编码作为键值),数据表的PK生成策略将被覆盖 -->
<setting name="useGeneratedKeys" value="true" />
<!-- 给予被嵌套的resultMap以字段-属性的映射支持 -->
<setting name="autoMappingBehavior" value="FULL" />
<!-- 对于批量更新操作缓存SQL以提高性能 -->
<!-- <setting name="defaultExecutorType" value="BATCH" /> -->
<!-- 数据库超过25000秒仍未响应则超时 -->
<setting name="defaultStatementTimeout" value="25000" />
<!--使用log4j输出日志 -->
<setting name="logImpl" value="STDOUT_LOGGING" />
</settings>
<!-- <plugins>
<plugin interceptor="com.ketu.common.interceptor.MybatisInterceptor" />
</plugins> -->
<!-- 全局别名设置,在映射文件中只需写别名,而不必写出整个类路径 -->
<!-- <typeAliases>
<typeAlias alias="TestBean"
type="com.wotao.taotao.persist.test.dataobject.TestBean" />
</typeAliases> -->
<!-- 非注解的sql映射文件配置,如果使用mybatis注解,该mapper无需配置,但是如果mybatis注解中包含@resultMap注解,则mapper必须配置,给resultMap注解使用 -->
<!-- <mappers>
<mapper resource="mybatisMapper/test-mapper.xml" />
<mapper resource="mybatisMapper/paging-mapper.xml" />
</mappers> -->
</configuration>
所注释的是本人就是方便你们去看看。等下跟自动配置对比下。之前我们所学的mybatis配置文件就是需要配置mapper文件的映射替代;但是现在在properties配置文件中可以直接配置了;上面的配置文件中就有写到。
这样就算连接上数据库了;那么就测试一下:
自己模仿我这个结构去搭建一个;在这里我给你小提示;有许多建目录都是没有自动完全展开的;导致不好建立自己的根目录;比如有很多小伙伴遇到这种情况
解决办法:
将√给去掉就行了。
既然是和数据库交互;下面就是测试代码:
package com.lp.demo.book.controller;
import com.lp.demo.book.domain.SysUser;
import com.lp.demo.book.service.SysUserService;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import javax.annotation.Resource;
import java.util.List;
import java.util.Map;
@Controller
public class TestController {
@Resource
private SysUserService sysUserService;
@RequestMapping("test")
public String test(Map<String ,Object> map,SysUser sysUser){
List<SysUser> sysUsers = sysUserService.selectAll(sysUser);
map.put("user",sysUsers);
return "success";
}
}
SysUserService 代码:
package com.lp.demo.book.service;
import com.lp.demo.book.domain.SysUser;
import java.util.List;
public interface SysUserService {
/**
* 登录检测属于哪个地区就显示该区域的组织机构
* @param user
* @return
*
* */
List<SysUser> selectAll(SysUser user);
}
SysUserServiceImpl代码:
package com.lp.demo.book.service.serviceImpl;
import javax.annotation.Resource;
import com.lp.demo.book.dao.SysUserDao;
import com.lp.demo.book.domain.SysUser;
import com.lp.demo.book.service.SysUserService;
import org.springframework.stereotype.Service;
import java.util.List;
import org.springframework.transaction.annotation.Transactional;
@Service //将该类装备成一个bean
@Transactional //开启事物
public class SysUserServiceImpl implements SysUserService {
@Resource
private SysUserDao sysUserDao;
@Override
public List<SysUser> selectAll(SysUser user) {
return sysUserDao.selectAll(user);
}
}
SysUserDao代码:
package com.lp.demo.book.dao;
import com.lp.demo.book.domain.SysUser;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import java.util.List;
@Mapper
public interface SysUserDao{
/**
* 登录检测属于哪个地区就显示该区域的组织机构
* @param user
* @return
*/
List<SysUser> selectAll(SysUser user);
}
页面接收代码:
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<tr th:each="user : ${user}">
<td th:text="${user.id}">neo</td>
<td th:text="${user.loginName}">neo</td>
</tr>
</body>
</html>
mybatisMapper代码:
<?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.lp.demo.book.dao.SysUserDao">
<resultMap id="BaseResultMap" type="com.lp.demo.book.domain.SysUser">
<id column="id" jdbcType="INTEGER" property="id" />
<result column="login_name" jdbcType="VARCHAR" property="loginName" />
<result column="password" jdbcType="VARCHAR" property="password" />
<result column="no" jdbcType="VARCHAR" property="no" />
<result column="name" jdbcType="VARCHAR" property="name" />
<result column="email" jdbcType="VARCHAR" property="email" />
<result column="mobile" jdbcType="VARCHAR" property="mobile" />
<result column="status" jdbcType="INTEGER" property="status" />
<result column="create_user_id" jdbcType="INTEGER" property="createUserId" />
<result column="create_time" jdbcType="TIMESTAMP" property="createTime" />
<result column="update_user_id" jdbcType="INTEGER" property="updateUserId" />
<result column="update_time" jdbcType="TIMESTAMP" property="updateTime" />
<result column="remarks" jdbcType="LONGVARCHAR" property="remarks" />
</resultMap>
<select id="selectAll" resultMap="BaseResultMap">
select sys_user.id, login_name, sys_user.password, sys_user.no, sys_user.name, sys_user.email, sys_user.mobile, sys_user.status, sys_user.create_user_id,
sys_user.create_time, sys_user.update_user_id, sys_user.update_time, sys_user.remarks
from sys_user
<where>
<if test="id!=null "> and id = #{id,jdbcType=INTEGER}</if>
<!--<if test="loginName!=null and loginName!=''"> and sys_user.login_name = #{loginName,jdbcType=VARCHAR}</if>
<if test="password!=null and password!=''"> and sys_user.password = #{password,jdbcType=VARCHAR}</if>-->
<if test="no!=null and no!=''"> and sys_user.no = #{no,jdbcType=VARCHAR}</if>
<if test="name!=null and name!=''"> and sys_user.name = #{name,jdbcType=VARCHAR}</if>
<if test="email!=null and email!=''"> and sys_user.email = #{email,jdbcType=VARCHAR}</if>
<if test="mobile!=null and mobile!=''"> and sys_user.mobile = #{mobile,jdbcType=VARCHAR}</if>
<if test="status!=null "> and sys_user.status = #{status,jdbcType=INTEGER}</if>
<if test="createUserId!=null "> and sys_user.create_user_id = #{createUserId,jdbcType=INTEGER}</if>
<if test="updateUserId!=null "> and sys_user.update_user_id = #{updateUserId,jdbcType=INTEGER}</if>
<if test="updateTime!=null "> and sys_user.update_time = #{updateTime,jdbcType=TIMESTAMP}</if>
<if test="remarks!=null and remarks!=''"> and sys_user.remarks = #{remarks,jdbcType=LONGVARCHAR}</if>
</where>
order by create_time asc
</select>
</mapper>
成功后的页面:
总结:是不是更简单了;对于我们开发者来说;这一套框架只会让开发者更加快捷;所以你们不懂的可以评论;感谢你们的支持。