Springboot之持久层Mybatis

四、整合Mybatis

 

整合 MyBatis 有两种方式:

1) 使用 mybatis 官方提供的 Spring Boot 整合包实现。

2) 使用 mybatis-spring 整合的方式,也就是传统的方式(推荐,此方式容易控制 MyBatis 的配置)。

4.1配置依赖

方式一:

添加依赖

<!-- mybatis -->
<dependency>
    <groupId>org.mybatis.spring.boot</groupId>
    <artifactId>mybatis-spring-boot-starter</artifactId>
    <version>1.3.0</version>
</dependency>

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

配置数据库连接:

 

在 application.properties 中添加:

# 数据源配置
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3380/springboot?useUnicode=true&characterEncoding=utf8
spring.datasource.username=root
spring.datasource.password=tiger

# mybatis 配置
mybatis.config-location=classpath:mybatis/mybatis-config.xml
mybatis.mapper-locations=classpath:mybatis/mapper/*.xml

方式二:

添加依赖:

<dependency>
    <groupId>org.mybatis</groupId>
    <artifactId>mybatis</artifactId>
    <version>3.4.4</version>
</dependency>

<dependency>
    <groupId>org.mybatis</groupId>
    <artifactId>mybatis-spring</artifactId>
    <version>1.3.1</version>
</dependency>

创建配置类:


@Configuration
public class MyBatisConfiguration {

    @Bean
    @ConditionalOnMissingBean // 当容器里没有指定的 Bean 的情况下创建该对象
    public SqlSessionFactoryBean sqlSessionFactory(DataSource dataSource) {
        SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean();
        // 设置数据源
        sqlSessionFactoryBean.setDataSource(dataSource);
        
        // 设置mybatis的主配置文件
        ResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();
        Resource mybatisConfigXml = resolver.getResource("classpath:mybatis/mybatis-config.xml");
        sqlSessionFactoryBean.setConfigLocation(mybatisConfigXml);
        
        // 设置mapper映射文件
        Resource[] mapperXml;
        try {
            mapperXml = resolver.getResources("classpath:mybatis/mapper/*.xml");
            sqlSessionFactoryBean.setMapperLocations(mapperXml);
        } catch (IOException e) {
            e.printStackTrace();
        }
        
        // 设置别名包
        //sqlSessionFactoryBean.setTypeAliasesPackage("com.light.domain");

        return sqlSessionFactoryBean;
    }

    @Bean
    @ConditionalOnBean(SqlSessionFactoryBean.class) // 当 SqlSessionFactoryBean 实例存在时创建对象
    public MapperScannerConfigurer mapperScannerConfigurer() {
        MapperScannerConfigurer mapperScannerConfigurer = new MapperScannerConfigurer();
        mapperScannerConfigurer.setBasePackage("com.light.dao");
        return mapperScannerConfigurer;
    }
}

此方式也需要在 applicaton.properties 配置数据库连接,当不需要在文件中配置 mybatis 相关参数。

以上便是两种方式的配置的不同之处。

在 src/main/resources 下创建 mybatis 文件夹,并在 mybatis 文件夹中创建 "mybatis-config.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>
    <typeAliases>
    </typeAliases>
</configuration>

mybatis 文件夹下再创建一个 "mapper" 文件夹,里边存放 Mpper 接口对应的 mapper 映射文件。

4.2测试

4.2.1建表

 

在 MySQL 中创建名为 eichong的数据库,在该库中创建 tbl_user表:

CREATE TABLE `tbl_user` (
    `user_id` INT(11) NOT NULL,
    `user_account` VARCHAR(10) NOT NULL,
    `user_password` VARCHAR(50) NULL DEFAULT NULL,
    PRIMARY KEY (`id`)
)
ENGINE=InnoDB
;

4.2.2实体类:


public class UserDO implements Serializable {
	private static final long serialVersionUID = 2147698087288992750L;
	private Long userId;
	private String userAccount;
	private String userPassword;

get,set方法省略

4.2.3Mapper接口

@Mapper
public interface UserMapper {
	void insert(UserDO userDO);
	void update(UserDO userDO);
	void delete(@Param("id")Long id);
    UserDO getById(@Param("id") Long id);
}

service方法

@Service
//@CacheConfig(cacheNames = "user")
public class UserServiceImpl implements UserService{
	
	@Autowired
    private UserMapper userMapper;

	public void add(UserDO userDO) {
		userMapper.insert(userDO);
	}

	public void update(UserDO userDO) {
		userMapper.update(userDO);
		
	}

	public UserDO getById(Long id) {
		return userMapper.getById(id);
	}

	public void remove(Long id) {
		userMapper.delete(id);
	}
}

mybatis/mapper/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="cn.lf.ow.mapper.UserMapper">
    <resultMap type="cn.lf.ow.model.UserDO" id="resutUser">
        <id property="userId" column="user_id"/>
        <result property="userAccount" column="user_account" />
		<result property="userPassword" column="user_password" />
		<result property="gmtCreate" column="gmt_create" />
    </resultMap>
    
    <insert id="insert" parameterType="cn.lf.ow.model.UserDO">
        insert into tbl_user (user_account,user_password) values (#{userAccount},#{userPassword});
    </insert>
    
    <update id="update" parameterType="cn.lf.ow.model.UserDO">
       update tbl_user 
           set user_account = #{userAccount},
               user_password = #{userPassword}
       where user_id = #{userId}
    </update>
    
    <delete id="delete" parameterType="java.lang.Long">
        delete from tbl_user where user_id = #{id}
    </delete>
    
     <select id="getById" parameterType="java.lang.Long" 
        resultMap="resutUser">
        select user_account,user_password from tbl_user where user_id = #{id};
     </select>
     
</mapper>

测试类:

@Controller
@RequestMapping("user")
@ResponseBody
public class UserController {
	
	@Autowired
    private UserService userService;
	
	@GetMapping("/save")
    public Map<String,Object> save(){
    	UserDO user = new UserDO();
    	user.setUserAccount("jack124");
        user.setUserPassword("jack124");
        user.setGmtCreate(new Date());
        userService.add(user);
        
        Map<String,Object> map = new HashMap<String,Object>();
        map.put("code", "200");
        map.put("msg", "保存成功");
        return map;
    }
	
    @RequestMapping("get/{id}")
    public Map<String,Object> get(@PathVariable("id") Long id) {
        UserDO user = this.userService.getById(id);
        Map<String,Object> map = new HashMap<String,Object>();
        map.put("code", "200");
        map.put("msg", "获取成功");
        map.put("data", user);
        return map;
    }
	 
	@GetMapping("/update")
    public Map<String,Object> update(UserDO user){
	    userService.update(user);
        Map<String,Object> map = new HashMap<String,Object>();
        map.put("code", "200");
        map.put("msg", "修改成功");
        return map;
    }
	
	@RequestMapping("delete/{id}")
    public Map<String,Object> delete(@PathVariable("id") Long id) {
        this.userService.remove(id);
        Map<String,Object> map = new HashMap<String,Object>();
        map.put("code", "200");
        map.put("msg", "删除成功");
        return map;
    }
}

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值