前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >SpringBoot之Mybatis

SpringBoot之Mybatis

作者头像
王念博客
发布2019-07-25 18:21:28
4790
发布2019-07-25 18:21:28
举报
文章被收录于专栏:王念博客王念博客王念博客

前言:群里面经常有人问有木有mybatis的案例,正好有空整合一下。我之前没有用过mybatis,但是跑过简单的增删改查,发现真的很轻量,写sql还比较不错,多表查询也比较方便,但是insert 和update有点麻烦(字段一多写sql会死人)。用了之后我还是希望用jpa,毕竟增删改查都不用自己写,关键可以直接传对象。

springboot和mybatis整合的框架mybatis-spring-boothttp://www.oschina.net/p/mybatis-spring-boot

有两种实现的方式 xml和注解,用了之后发现xml配置还是挺麻烦的。

update 2016/11/12 差不多用了半年的mybatis发现优点挺多的,在性能和写sql上比较灵活,也不用在实体上手动指定表里字段的映射,结合mybatis自动生成工具发现效率也挺快的,在mybatis配置上我也换了N种配置方式。

1.导入maven依赖
<!--导入mybatis-->
<dependency>
   <groupId>org.mybatis.spring.boot</groupId>
   <artifactId>mybatis-spring-boot-starter</artifactId>
   <version>1.1.1</version>
</dependency>
导入数据库驱动
2.配置数据源
spring.datasource.url =jdbc:mysql://
spring.datasource.username =root
spring.datasource.password =root
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.max-active=1000
spring.datasource.test-on-borrow=true
spring.datasource.test-on-return=true
#重连
spring.datasource.time-between-eviction-runs-millis=1800000
spring.datasource.num-tests-per-eviction-run=3
#最小生命时间
spring.datasource.min-evictable-idle-time-millis=1800000
spring.datasource.validation-query=SELECT 1
3.创建实体类
package com.wangnian.mybatis.entity;

import java.io.Serializable;

/**
 * Created by 王念 on 2016/4/28.
 */
public class User implements Serializable {
    private Integer id;
    private  String name;

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}
4.创建dao(mapper)
package com.wangnian.mybatis.annotation;
import com.wangnian.mybatis.entity.User;
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;

import java.util.List;
import java.util.Map;

/**
 * Created by 王念 on 2016/4/28.
 */
@Mapper
public interface UserDao1 {

    @Select("select * from user where id=#{id}")
    public User selectid(@Param("id") Integer id);


    @Insert("insert into user values(null,#{name})")
    public boolean insertUser(@Param("name") String name);

    @Select("select * from user u join user u1  where u.id=#{id}")
    public List<Map> select(@Param("id") Integer id);

    //XML自动注入
    User selectUserById(@Param("id") Integer id);

}
5.添加mapper文件
<?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.wangnian.mybatis.xml.UserDao1">
    <select id="selectUserById" resultType="User">
        select * from user where id = #{id}
    </select>
</mapper>
6.配置mybatis自动注入Mapper(三种方式配置,推荐使用第三种,简单)

①种方式

1.添加一个mybatisConfig.xml

2.指定每一个的mappers位置

<?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>
        <package name="com.wangnian.mybatis.entity"/>
    </typeAliases>
    <mappers>
        <mapper resource="mybatis/mapper/UserMapper.xml"/>
    </mappers>
</configuration>

3.在application.properties里指定mybatisConfig.xml的位置

mybatis.config-location=classPath:mybatisConfig.xml

②种方式

通过javaBean的方式配置

package com.fengchao.config;

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.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
import org.springframework.core.io.support.ResourcePatternResolver;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;
import org.springframework.transaction.PlatformTransactionManager;

import javax.sql.DataSource;

/**
 * MyBatis基础配置
 *
 * @author wangnian
 */
@Configuration
@MapperScan("com.fengchao.dao")
//s@EnableTransactionManagement
public class MyBatisConfig {
    @Autowired
    private DataSource dataSource;
    @Bean(name = "sqlSessionFactory")
    public SqlSessionFactory sqlSessionFactoryBean() {
        SqlSessionFactoryBean sqlsession = new SqlSessionFactoryBean();
        sqlsession.setDataSource(dataSource);
        sqlsession.setTypeAliasesPackage("com.fengchao.model");//扫描entity包 使用别名
        org.apache.ibatis.session.Configuration configuration=new org.apache.ibatis.session.Configuration();
        configuration.setUseGeneratedKeys(true);//使用jdbc的getGeneratedKeys获取数据库自增主键值
        configuration.setUseColumnLabel(true);//使用列别名替换列名 select user as User
        configuration.setMapUnderscoreToCamelCase(true);//-自动使用驼峰命名属性映射字段   userId    user_id
        sqlsession.setConfiguration(configuration);
        sqlsession.setFailFast(true);
        //添加XML目录
        ResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();
        try {
            sqlsession.setMapperLocations(resolver.getResources("classpath:mybatis-mapper/*.xml"));
            return sqlsession.getObject();
        } catch (Exception e) {
            e.printStackTrace();
            throw new RuntimeException(e);
        }
    }
    @Bean
    public SqlSessionTemplate sqlSessionTemplate(SqlSessionFactory sqlSessionFactory) {
        return new SqlSessionTemplate(sqlSessionFactory);
    }


    @Bean
    public PlatformTransactionManager annotationDrivenTransactionManager() {
        return new DataSourceTransactionManager(dataSource);
    }

}

③种方式

直接通过application.properties中配置

#mybatis配置
#指定mapper.xml的位置
mybatis.mapper-locations=classpath:mapper/*.xml
#
mybatis.configuration.mapUnderscoreToCamelCase=true
#
mybatis.configuration.useColumnLabel=true
7.运行test
package com.wangnian.mybatis;

import com.wangnian.mybatis.annotation.UserDao1;
import com.wangnian.mybatis.entity.User;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.CommandLineRunner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

import java.util.List;
import java.util.Map;

import static javafx.beans.binding.Bindings.select;

@SpringBootApplication
public class SpringbootmybatisApplication implements CommandLineRunner {

    public static void main(String[] args) {
        SpringApplication.run(SpringbootmybatisApplication.class, args);
    }


    @Autowired
    private UserDao1 userDao1;

  

    @Override
    public void run(String... strings) throws Exception {
        //查询
        User user = userDao1.selectid(1);
        System.out.println(user.getName());
        //插入
        boolean b=  userDao1.insertUser("wangnain");
        System.out.println(b);
       //多表查询
       List<Map> list= userDao1.select(1);
       System.out.println(list.get(1));

       //测试xml注入的方式
       User user1 = userDao1.selectUserById(1);
       System.out.println(user1.getUserName());




    }
}
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1.导入maven依赖
  • 2.配置数据源
  • 3.创建实体类
  • 4.创建dao(mapper)
  • 5.添加mapper文件
  • 6.配置mybatis自动注入Mapper(三种方式配置,推荐使用第三种,简单)
  • 7.运行test
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档