使用篇-mybatis简单使用实例分享

1.mybatis

1.mapper接口开发

mapper接口+mapper.xml

public interface StudentMapper {
    List<Student> getAllStus();
}
<?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.ujiuye.mybatis.mapper.StudentMapper">
    <resultMap id="StudentResultMap" type="Student">
        <id column="sid" property="sid"/>
        <result column="sname" property="sname"/>

        <collection property="courses" ofType="Course">
            <id column="cid" property="cid"/>
            <result column="cname" property="cname"/>
        </collection>
    </resultMap>
    <!--# 查询所有学生所选的所有课程-->
    <select id="getAllStus" resultMap="StudentResultMap">
        SELECT * FROM t_stu s,t_stu_course sc,t_course c WHERE s.`sid`=sc.`sid` AND c.`cid`=sc.`cid`
    </select>
</mapper>

2.slf4j+logback日志

  • 1.导入依赖
 <dependency>
            <groupId>ch.qos.logback</groupId>
            <artifactId>logback-classic</artifactId>
            <version>1.2.3</version>
        </dependency>
  • 2.导入logback.xml
<?xml version="1.0" encoding="UTF-8" ?>

<configuration>
    <!--禁止logback默认显示的日志信息-->
    <statusListener class="ch.qos.logback.core.status.NopStatusListener" />
    <!--定义一个带颜色的控制台输出日志PATTERN-->
    <property name="CONSOLE_LOG_PATTERN"
              value="时间:%date{yyyy-MM-dd HH:mm:ss} 级别: %highlight(%-5level) 进程: %boldYellow(%thread) 类: %boldGreen(%logger) 信息: %msg%n"/>
    <!--定义一个不带颜色的文件日志输出格式,因为文件不能带颜色-->
    <property name="ERRINFOFILE_LOG_PATTERN" value="时间:%date{yyyy-MM-dd HH:mm:ss} 级别: %-5level 进程: %thread 类: %logger 信息: %msg%n"/>

    <appender name="consoleLog" class="ch.qos.logback.core.ConsoleAppender">
        <layout class="ch.qos.logback.classic.PatternLayout">
            <pattern>
                ${CONSOLE_LOG_PATTERN}
            </pattern>
        </layout>
    </appender>

    <root level="info">
        <appender-ref ref="consoleLog" />
    </root>
    
    <logger name="com.ujiuye.mybatis.mapper" level="debug"/>
</configuration>
  • 3.在测试类加@slf4j

  • 4.使用

@Slf4j
public class App {

    private SqlSessionFactory sqlSessionFactory;

    @Before
    public void init() throws Exception{
        String resource = "mybatis.xml";
        InputStream inputStream = Resources.getResourceAsStream(resource);
        sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
    }

    @Test
    public void testGetDept() throws Exception{
        SqlSession sqlSession = sqlSessionFactory.openSession();
        DeptMapper deptMapper = sqlSession.getMapper(DeptMapper.class);
        Dept dept = deptMapper.getDeptById(1);
        log.info("{}",dept);
    }
}

3.进阶内容

多参数问题@param
${} 和#{}sql片段 || 数据
动态sqlif、set、where、foreach
关联查询association(关联单个对象)、collection(关联集合对象)
延迟加载“lazyLoadingEnabled”
缓存机制cache 自动开启
配置第三方数据源public class DataSourceConfig extends UnpooledDataSourceFactory { public DataSourceConfig() { this.dataSource=new DruidDataSource(); } }

4.开源插件

1.pageHelper(分页)

  • 导入maven依赖

     <!--pageHelper-->
            <dependency>
                <groupId>com.github.pagehelper</groupId>
                <artifactId>pagehelper</artifactId>
                <version>5.1.10</version>
            </dependency>
    
  • 在mybatis.xml中配置

    <!--分页插件-->
    		<plugin interceptor="com.github.pagehelper.PageInterceptor">
    			<!-- 参数合理化 -->
    			<property name="reasonable" value="true"/>
    		</plugin>
    
  • 在类中使用

    //测试pageHepler
        @Test
        public void testPageHepler() throws Exception{
            //模拟前台参数:当前页,页面显示数量
            Integer pageNumber = 2;
            Integer paegSize =2 ;
            PageHelper.startPage(pageNumber,paegSize);
    
            SqlSession sqlSession = sqlSessionFactory.openSession();
            EmpMapper mapper = sqlSession.getMapper(EmpMapper.class);
            List<Emp> list = mapper.getEmps();
    
            PageInfo<Emp> pageInfo = new PageInfo<>(list);
            //查看第二页数据
            log.info("{}",pageInfo.getList());
        }
    

2.通用mapper(单表操作)

  • 导入maven依赖

    <!--通用mapper-->
            <dependency>
                <groupId>com.github.abel533</groupId>
                <artifactId>mapper</artifactId>
                <version>2.3.4</version>
            </dependency>
            <dependency>
                <groupId>javax.persistence</groupId>
                <artifactId>persistence-api</artifactId>
                <version>1.0</version>
            </dependency>
    
  • 在mybatis.xml中配置(必须配置在pagehelper下面)

    <!--mapper拦截器-->
    		<plugin interceptor="com.github.abel533.mapperhelper.MapperInterceptor">
    			<!--通用Mapper接口 -->
    			<property name="mappers" value="com.github.abel533.mapper.Mapper" />
    		</plugin>
    
  • 编写自己的mapper接口

    public interface DogMapper extends Mapper<Dog> {
        
    }
    
  • 在mybatis.xml关联mapper

    <!--关联mapper-->
    		<mapper class="com.ujiuye.mybatis.mapper.DogMapper"/>
    
  • 在类中使用

    //测试通用mapper
        @Test
        public void testCommonMapper() throws Exception{
            SqlSession sqlSession = sqlSessionFactory.openSession();
            DogMapper mapper = sqlSession.getMapper(DogMapper.class);
    
            //查询所有
            List<Dog> list = mapper.select(new Dog());
            log.info("{}",list);
    
            //查询单个
            Dog dog = mapper.selectByPrimaryKey(1);
            log.info("{}",dog);
    
            //增
            Dog dog1 = new Dog();
            dog1.setName("藏獒");
            dog1.setAge(5);
            int i = mapper.insertSelective(dog1);
            log.info("{}",i);
    
            //删
            int i1 = mapper.deleteByPrimaryKey(2);
            log.info("{}",i1);
    
            //改
            Dog dog2 = new Dog();
            dog2.setName("汪汪");
            dog2.setAge(1);
            dog2.setId(1);
            int i2 = mapper.updateByPrimaryKeySelective(dog2);
            log.info("{}",i2);
    
            //提交事务关闭资源
            sqlSession.commit();
            sqlSession.close();
        }
    
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

道-闇影

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

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

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

打赏作者

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

抵扣说明:

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

余额充值