0
点赞
收藏
分享

微信扫一扫

springBoot整合myBatis项目(一劳永逸配置系列)

德州spark 2022-04-25 阅读 36

 项目整体目录结构:

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAY29kZVNuaXBpbmc=,size_16,color_FFFFFF,t_70,g_se,x_16

 

一、首先还是雷打不动的引入项目所需依赖Jar包(不涉及前文中已有的Jar包)

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-configuration-processor</artifactId>
    <optional>true</optional>
</dependency>
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>druid</artifactId>
    <version>1.1.1</version>
</dependency>

二、src\main\resources目录下创建mybatis目录,并新建mybatis-config.xml,可配置全局信息

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD SQL Map Config 3.0//EN"  
	"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
	<settings>
		<!-- 开启二级缓存(myBatis默认开启一级缓存) -->
		<setting name="cacheEnabled" value="true" />
		<!-- 允许JDBC支持生成的键,需要适合的驱动,比如:SQL保存操作后可以返回数据库自动生成的主键ID -->
        <setting name="useGeneratedKeys" value="true" />
        <!-- SQL执行器设置(三种:SIMPLE、REUSE、BATCH) -->
        <setting name="defaultExecutorType" value="REUSE" /> 
        <!-- 映射map时,字段值为null也返回字段名称 -->
        <setting name="callSettersOnNulls" value="true"/>
    </settings>
    
    <!-- 此处可以配置实体类信息 -->
    <!-- 
    <typeAliases>
		<typeAlias type="com.example.demo.entity.User" alias="User"/>
	</typeAliases> 
	-->
</configuration>

三、创建数据访问层DAO(DAO.java及DaoSupport.java文件)

数据访问接口类 DAO.java:

package com.example.demo.dao;


public interface Dao {
	
	/**
	 * 保存对象
	 * @param str
	 * @param obj
	 * @return
	 * @throws Exception
	 */
	public Object save(String str, Object obj) throws Exception;
	
	/**
	 * 修改对象
	 * @param str
	 * @param obj
	 * @return
	 * @throws Exception
	 */
	public Object update(String str, Object obj) throws Exception;
	
	/**
	 * 删除对象 
	 * @param str
	 * @param obj
	 * @return
	 * @throws Exception
	 */
	public Object delete(String str, Object obj) throws Exception;

	/**
	 * 查找对象
	 * @param str
	 * @param obj
	 * @return
	 * @throws Exception
	 */
	public Object findForObject(String str, Object obj) throws Exception;

	/**
	 * 查找对象
	 * @param str
	 * @param obj
	 * @return
	 * @throws Exception
	 */
	public Object findForList(String str, Object obj) throws Exception;
}

数据访问实现类DaoSupport.java:

package com.example.demo.dao;

import javax.annotation.Resource;
import org.mybatis.spring.SqlSessionTemplate;
import org.springframework.stereotype.Repository;

@Repository("daoSupport")
public class DaoSupport implements Dao {

	@Resource(name = "demoSqlSessionTemplate")
	private SqlSessionTemplate demoSqlSessionTemplate;
	
	/**
	 * 保存对象
	 * @param str
	 * @param obj
	 * @return
	 * @throws Exception
	 */
	public Object save(String str, Object obj) throws Exception {
		return demoSqlSessionTemplate.insert(str, obj);
	}
	
	/**
	 * 修改对象
	 * @param str
	 * @param obj
	 * @return
	 * @throws Exception
	 */
	public Object update(String str, Object obj) throws Exception {
		return demoSqlSessionTemplate.update(str, obj);
	}
	
	/**
	 * 删除对象 
	 * @param str
	 * @param obj
	 * @return
	 * @throws Exception
	 */
	public Object delete(String str, Object obj) throws Exception {
		return demoSqlSessionTemplate.delete(str, obj);
	}
	 
	/**
	 * 查找对象
	 * @param str
	 * @param obj
	 * @return
	 * @throws Exception
	 */
	public Object findForObject(String str, Object obj) throws Exception {
		return demoSqlSessionTemplate.selectOne(str, obj);
	}

	/**
	 * 查找对象
	 * @param str
	 * @param obj
	 * @return
	 * @throws Exception
	 */
	public Object findForList(String str, Object obj) throws Exception {
		return demoSqlSessionTemplate.selectList(str, obj);
	}
}

四、src\main\java\com\example\demo目录下创建config目录,用以存放项目配置相关信息

SQLSettings.java:

package com.example.demo.config;

import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;

@Component
@ConfigurationProperties(prefix = "spring.datasource")
public class SQLSettings {

	private String driverClassName;
	private String url;
	private String username;
	private String password;

	public String getDriverClassName() {
		return driverClassName;
	}

	public void setDriverClassName(String driverClassName) {
		this.driverClassName = driverClassName;
	}

	public String getUrl() {
		return url;
	}

	public void setUrl(String url) {
		this.url = url;
	}

	public String getUsername() {
		return username;
	}

	public void setUsername(String username) {
		this.username = username;
	}

	public String getPassword() {
		return password;
	}

	public void setPassword(String password) {
		this.password = password;
	}
}

DataSourceConfig.java:

package com.example.demo.config;

import javax.sql.DataSource;

import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.mybatis.spring.SqlSessionTemplate;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.boot.autoconfigure.jdbc.DataSourceProperties;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import org.springframework.core.io.ClassPathResource;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;

import com.alibaba.druid.pool.DruidDataSource;


@Configuration
//扫描注入数据访问层dao
@MapperScan(basePackages = "com.example.demo.dao", sqlSessionTemplateRef = "demoSqlSessionTemplate")
public class DataSourceConfig {

    @Autowired
    private SQLSettings sqlSettings;
    
	@Bean(name = "demoDataSource")
    @ConfigurationProperties("spring.datasource.*")
    public DataSource DataSource(DataSourceProperties properties) throws Exception{
		DruidDataSource dataSource = new DruidDataSource();
        dataSource.setDriverClassName(sqlSettings.getDriverClassName());
        dataSource.setUrl(sqlSettings.getUrl());
        dataSource.setUsername(sqlSettings.getUsername());
        dataSource.setPassword(sqlSettings.getPassword());
        return dataSource;
    }
	@Bean(name="demoSqlSessionFactroy")
	public SqlSessionFactory yonSqlSessionFactroy(@Qualifier("demoDataSource") DataSource dataSource) throws Exception{
		SqlSessionFactoryBean bean=new SqlSessionFactoryBean();
		bean.setDataSource(dataSource);
        //注入mybatis配置信息
		bean.setConfigLocation(new ClassPathResource("mybatis/mybatis-config.xml"));
        //加载Mapper映射文件
		bean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath:mybatis/*/*.xml"));
		return bean.getObject();
	}
	@Primary
	@Bean(name="demoSqlSessionTemplate")
	public SqlSessionTemplate yonSqlSessionTemplate(@Qualifier("demoSqlSessionFactroy") SqlSessionFactory sqlSessionFactory) throws Exception{
		return new SqlSessionTemplate(sqlSessionFactory);
	}
}

以上,即是本框架一次性配置的文件信息,后期开发过程中可以一劳永逸,只需关注controller和service的业务实现即可。具体使用:

Controller:

package com.example.demo.controller;

import java.util.HashMap;
import java.util.List;

import javax.annotation.Resource;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import com.example.demo.entity.User;
import com.example.demo.service.UserService;

@Controller
public class UserController {
	@Resource(name="userService")
	private UserService userService;
	
	@RequestMapping("/getUser")
	public String getUser(Model model){
		try {
			HashMap<String, Object> paramMap=new HashMap<>();
			paramMap.put("userName", "王");
			paramMap.put("userSex", "男");
			List<User> userList = userService.getUserList(paramMap);
			model.addAttribute("userList",userList);
		} catch (Exception e) {
			e.printStackTrace();
		}
		return "user/userHtm";
	}
}

Service.java:

package com.example.demo.service;

import java.util.HashMap;
import java.util.List;

import javax.annotation.Resource;

import org.springframework.stereotype.Service;

import com.example.demo.dao.Dao;
import com.example.demo.entity.User;

@Service
public class UserService {
	@Resource(name = "daoSupport")
	private Dao dao;
	public List<User> getUserList(HashMap<String, Object> paramMap) throws Exception {
        //UserMapper为mapper(xml)文件名,getUserList为SQL的id
		return (List<User>) dao.findForList("UserMapper.getUserList", paramMap);
	}
	
}

UserMapper.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="UserMapper">
	<select id="getUserList" parameterType="map" resultType="map">
		select
			userName,
			userSex,
			userBirth
		from user_info
		where 1=1
		<if test="userSex !=null and userSex !=''">
			and userSex=#{userSex}
		</if>
		<if test="userName !=null and userName !=''">
			and userName like CONCAT('%',#{userName},'%')
		</if>
	</select>
</mapper>

请求测试:

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAY29kZVNuaXBpbmc=,size_20,color_FFFFFF,t_70,g_se,x_16

 总结:每一种主流框架的项目结构都不是千篇一律的,每个人有每个人的设计思想,适合自己的就是最好的~

 

举报

相关推荐

0 条评论