连接数据库(Mysql)MyBatis+alibaba Druid数据源操作(二)

本文详细介绍了如何在SpringBoot框架中整合MyBatis,包括配置数据库连接、编写MyBatis配置文件、实现数据库操作代码及测试过程,展示了SpringBoot简化配置的优势。

摘要:

学习了(一)同学;那么也就会搭建属于自己的项目了;可能还要许多的原理不是很清楚;但是最终的总结就是首先mvc模式是没有变的;少得就是配置文件xml;springboot都以java类形式代替了xml;其原理分析一下;之前的ssm的spring和springmvc以及mybatis配置文件由自己写好;其中spring和springmvc交给web.xml配置上去初始化一下;而现在springboot是基于springmvc的;内置会自动配置;WebMvcAutoConfiguration是SpringMVC的自动配置类;ApplicationContextInitializer会自动配置spring。那么接下来就是连接自己的数据库操作了。

加载数据库整合MyBatis

  1. 首先就得加载所需要的包了:
    在这里插入图片描述我就加入了这几个包;想必大家对他们都熟悉不过了;之前的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>

成功后的页面:
在这里插入图片描述总结:是不是更简单了;对于我们开发者来说;这一套框架只会让开发者更加快捷;所以你们不懂的可以评论;感谢你们的支持。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小面包CC

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值