Mybatis安装配置使用

5,007 阅读4分钟

####1、配置 http://blog.csdn.net/gebitan505/article/details/54929287

  1. Pom加入配置
 <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.0.0.RELEASE</version>
        <relativePath /> <!-- lookup parent from repository -->
    </parent>

	<dependencies>
	
		<!--数据库支持 -->
		<dependency>
			<groupId>org.mybatis.spring.boot</groupId>
			<artifactId>mybatis-spring-boot-starter</artifactId>
			<version>1.3.2</version>
		</dependency>
		<!--mysql驱动 -->
		<dependency>
			<groupId>mysql</groupId>
			<artifactId>mysql-connector-java</artifactId>
			<scope>runtime</scope>
		</dependency>

		<!--连接池 -->
		<dependency>
			<groupId>com.alibaba</groupId>
			<artifactId>druid</artifactId>
			<version>1.1.5</version>
		</dependency>
	</dependencies>

	<build>
		<plugins>
			<plugin>
				<groupId>org.springframework.boot</groupId>
				<artifactId>spring-boot-maven-plugin</artifactId>
			</plugin>
		</plugins>
	</build>
	</build>
  1. 配置文件添加参数
spring:
  datasource:
    driverClassName: com.mysql.jdbc.Driver
    url: jdbc:mysql://localhost:3306/login?useUnicode=true&characterEncoding=utf-8
    username: root
    password: 630203
    type: com.alibaba.druid.pool.DruidDataSource


  1. 配置数据库连接的一些参数
mybatis.type-aliases-package=com.example.login

spring.datasource.driverClassName = com.mysql.jdbc.Driver
spring.datasource.url = jdbc:mysql://localhost:3306/test1?useUnicode=true&characterEncoding=utf-8
spring.datasource.username = root
spring.datasource.password = root

####2、使用数据库

  1. 定义Dao的mapper

第一种方式,直接在Mapper上面加Mapper注解,这样Spring就会把它加入到容器中

@Mapper
public interface LoginDao {
}

第二种方式,不加注解,在Application中指定Mapper包,以后这个包下的都会自动加入到Spring容器中

@SpringBootApplication
@MapperScan("com.example.juwnen")  
public class MyApplication 
}
  1. Sql语句的实现方法

第一种是直接在Mapper中的方法上直接写Sql语句

public interface LoginDao {
	@Select("select * from UserTable")
	List<UserEntity> queryUser();
}

第二种是通过Mapper映射到Mapper文件,在Mapper中进行填写Sql的实现

  1. 在Resources文件夹下创建mapper文件夹,创建对应Dao的mapper的xml。 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="com.example.test.demo.dao.AreaDao">
    <select id="queryArea" resultType="com.example.test.demo.entity.Area">
        SELECT *
        FROM tb_area
        ORDER BY priority
        DESC
    </select>

    <select id="queryAreaById" resultType="com.example.test.demo.entity.Area">
        SELECT *
        FROM tb_area
        WHERE area_id=#{areaId}
    </select>

    <!--useGeneratedKeys="true" 代表插入成功后会返回这条记录的id-->
    <!--keyProperty="areaId" keyColumn="area_id 分别代表主键id和表中id的名字-->
    <insert id="insertArea" useGeneratedKeys="true"
        parameterType="com.example.test.demo.entity.Area" keyProperty="areaId" keyColumn="area_id">
        INSERT INTO
        tb_area(area_name,priority,create_time,last_edit_time)
        VALUES
        (#{areaName},#{priority},#{createTime},#{lastEditTime})
    </insert>

    <update id="updateArea" parameterType="com.example.test.demo.entity.Area">
        UPDATE tb_area
        <set>
            <if test="areaName!=null">area_name=#{areaName},</if>
            <if test="priority!=null">priority=#{priority},</if>
            <if test="lastEditTime!=null">lastEditTime=#{lastEditTime},</if>
        </set>
        WHERE area_id=#{areaId}
    </update>

    <delete id="deleteArea">
        DELETE FROM
        tb_area
        WHERE
        area_id=#{areaId}
    </delete>
</mapper>
  1. 并且在application.yml中配置这个mapper文件的路径
mybatis:
  mapper-locations: classpath*:mapper/*.xml
  type-aliases-package: com.example.demo
  config-location: classpath:mybatis.xml

3 mapper文件中可以定义一些固定的常用名字

//定义表名
<sql id="tableName"> SYS_ADVERTSING </sql>

//引用表名
SELECT * FROM 
<include refid="tableName"></include>

4 mapper返回类型

List< Map< String, Object > >  (对应) resultType="java.util.HashMap"
List< String>  (对应) parameterType="java.util.List"

<foreach item="userIds" collection="userIds" open="("
			separator="," close=")">
			#{userIds}
		</foreach>

5 如果是多参数状态,没法指定入参的类型

//用注解方式指定别名
void updateAdvertsing( @Param( "advertsingId" ) String advertsingId, @Param( "updateParams" ) Map< String, Object > updateParams );

使用的时候,直接用别名
#{advertsingId}
#{updateParams.modifierId}

6 返回Boolean格式

<select id="ifExist" parameterType="string" resultType="boolean">
        <![CDATA[ select count(id) from web_member where name = #{name} ]]>
    </select> 

7 遍历传入的Map对象,导入每一个set对象组合

<set>
			<foreach collection="updateParams.entrySet()" index="key" item="value"
				separator=",">
				<if test="key != 'id'.toString()">
					${key} = #{value}
				</if>
			</foreach>
		</set>

8 使用like关键字

2.  bind标签

<select id="selectPersons" resultType="person" parameterType="person">
  <bind name="pattern" value="'%' + _parameter.username + '%'" />
  select id,sex,age,username,password 
  from person
  where username LIKE #{pattern}
</select>

9 插入list集合,批量insert into,想要批量insert into ,可以在Values后面的值,运用多个括号,,号分割,这样一条insert就可以插入多条

INSERT INTO
		<include refid="tableName"></include>
		(
		EXPRESS_ID,
		BRAND_ID,
		BRAND_NAME,
		CREATOR_ID,
		CREATOR,
		CREATE_TIME,
		MODIFIER_ID,
		MODIFIER,
		MODIFY_TIME
		)
		VALUES
		<foreach collection="userAppointExpressList" index="index"
			item="item" separator=",">
			(
			#{item.expressId},
			#{item.brandId},
			#{item.brandName},
			#{item.creatorId},
			#{item.creator},
			#{item.createTime},
			#{item.modifierId},
			#{item.modifier},
			#{item.modifyTime}
			)
		</foreach>

10 格式化返回的时间格式

DATE_FORMAT(CREATE_TIME,'%Y-%m-%d %H:%i:%s') as createTime

####3 参考网站

Spring Boot + MyBatis + MySQL 整合

在Spring Boot中集成Mybatis

MyBatis官方网站 ####4 使用问题

1 遇到查询数据库的时候,表字段有下划线的字段查询不出来数据。

解决方法:配置MyBstis的全局配置,让他能够映射出字段

<?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>
    <!-- 全局配置 -->
    <settings>
        <!--允许 JDBC 支持自动生成主键-->
        <setting name="useGeneratedKeys" value="false" />
        <!--是否开启自动驼峰命名规则(camel case)映射,即从经典数据库列名 A_COLUMN 到经典
 Java 属性名 aColumn 的类似映射。 -->
        <setting name="mapUnderscoreToCamelCase" value="true" />
    </settings>
</configuration>