【Mybatis】Mybatis使用

1.导入maven依赖

  现在基本上都是在maven导入依赖,应该没有人用jar包导入了吧,maven这个很简单,网上一搜就有。

2.mybatis.xml

第一配置运行环境

第二注册映射文件

<transactionManager type="JDBC"/>是注册事务管理器,这里一般是JDBC,不需要改动,不管你用的是Mysql还是Oracle。

<dataSource type="POOLED">数据库连接池技术,这个一般也是用的这个,mybatis总共支持三中,可以参考以下博客。

https://www.cnblogs.com/xunmengjun/p/14098794.htm

 

<?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>

    <properties resource="jdbc.properties"/>
    <typeAliases>
    
    <!-- <typeAlias type="com.gdufe.beans.Student" alias="student"/> -->
     <package name="com.gdufe.beans"/>

    </typeAliases>
    <!-- 配置运行环境 -->
    <environments default="testEM">
        <environment id="testEM">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                 <property name="driver" value="${jdbc.driver}"/>        
                 <property name="url" value="${jdbc.url}"/>        
                 <property name="username" value="${jdbc.user}"/>        
                 <property name="password" value="${jdbc.password}"/> 
            </dataSource>
        </environment>
    </environments>

    <!-- 注册映射文件 -->
    <mappers>
        <mapper resource="com/gdufe/dao/mapper.xml"/>
    </mappers>
</configuration>

 

 

3.mapper.xml 定义映射文件

映射文件,简称mapper,主要完成Dao层中SQL语句的映射,一般放在Dao包。

<?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="test">
    <insert id="insertStudent" parameterType="com.gdufe.beans.Student">
    insert into student(name,age,score) values(#{name},#{age},#{score})
    </insert>
</mapper>

 

 上面的配置文件应该很容易就看懂了吧,就是一个命名这个insert的名字为insertStudent,还有涉及到的实体类的包。

这里的id要跟dao层里面的方法名一致。主配置文件mybatis.xml里面需要注册mapper.xml,详情请看mybatis.xml的最后几行配置。

4.Dao的实现

这里面很复杂,所以一般都会将getSessionFactory包装成一个对象。

public class StudentDaoImpl implements IStudentDao {

    private SqlSession sqlSession;

    @Override
    public void insertStu(Student student) {
        try {
            //1.加载主配置文件
            InputStream inputStream = org.apache.ibatis.io.Resources.
                                        getResourceAsStream("mybatis.xml");
            //2.创建SqlSessionFactory对象
            SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
            //3.创建SqlSession对象
            sqlSession = sqlSessionFactory.openSession();
            //4.相关操作
            sqlSession.insert("insertStudent", student);
            sqlSession.commit();
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            if(sqlSession != null){
                sqlSession.close();
            }
        }
    }
}

 

需要commit(),添加的数据才会加进去到表里面,如果没有commit,数据id会被占用,但是不会插到表里面。

sqlSession.insert("insertStudent", student);

这里使用到的就是mapper.xml里面对insert方法的命名。

【Mybatis】Mybatis使用

 

 这里的namespace的名字就是在log4j.properties里面用到的(但是一般是写包名),不过实际开发中应该不会用到这个吧,就是简单地提一句。

log4j.properties

log4j.appender.console=org.apache.log4j.ConsoleAppender
log4j.appender.console.Target=System.out
log4j.appender.console.layout=org.apache.log4j.PatternLayout
log4j.appender.console.layout.ConversionPattern=[%-5p] %m%n

log4j.logger.test=debug,console

 

5.@@identity

获得插入数据的id,拿到自增的主键值。就是在你执行insert的时候,返回一个自增值的当前值。比如你在插入前,自增值id是11,在你insert之后,id就是12了,它就会给你返回一个12。

6.字段名和属性名不一致

当在工作时,很多时候数据库和编码是分开的,数据库里面的数据名称和我写的mybatis.xml里面设置的字段不一致

这时候可以采取

查询字段使用别名解决

【Mybatis】Mybatis使用

 

 

使用结果映射resultMap

【Mybatis】Mybatis使用

 

 7.特殊情况的查询

①利用map

【Mybatis】Mybatis使用

 

 

创建一个map,然后在方法里面导入map,

【Mybatis】Mybatis使用

 

 

#{}中可以放什么内容

1) 参数对象的属性

2) 随意的内容,此时的#{}是个占位符

3) 参数为map时的key

4) 参数为map时,若key所对应的value为对象,则可将该对象的属性放入

5) 参数的索引号

【Mybatis】Mybatis使用

 

 

②  动态sql

【Mybatis】Mybatis使用

 

 

加上了<where>标签

【Mybatis】Mybatis使用

 

 用相同的语句时,可以用一个id代替

【Mybatis】Mybatis使用

 

 

多条件模糊查询

【Mybatis】Mybatis使用

 

 

遍历条件的数组,foreach

【Mybatis】Mybatis使用

 

 

遍历ArrayList

【Mybatis】Mybatis使用

 

 

当ArrayList里面装的是对象

【Mybatis】Mybatis使用

 

 

多条件查询

【Mybatis】Mybatis使用

更为常用的方式

【Mybatis】Mybatis使用

 

 8.SpringBoot整合MyBatis

一般来说,在正常的使用当中,不需要这么复杂,在SpringBoot中的使用就特别的方便。以下简单说明一下是怎么使用的。

①首先在pom.xml导入maven依赖

②application.yml添加数据库的账号密码之类的东西

③application.properties 加入mapper路径

mybatis:
  #mapper配置文件
  mapper-locations: classpath:mapper/*.xml

 

④定义mapper层(也叫做Dao)

记得用@Mapper(其实就是一个interface)

在mapper.xml里面的namespace里面写的就是对应这个dao层的包

⑤定义mapper.xml

定义SQL语句

⑥定义service

⑦定义serviceImpl

  @Service("userService")

⑧真正使用

@Controller
@RequestMapping("/admin")
public class UserController {
    @Autowired
    private UserService userService;

    @PostMapping("/login")
    public void test(){
    User user = userService.findUserByUsername(username);
    }
}

 

上一篇:MyBatis


下一篇:Mybatis01