spring boot + mybatis

1 pom.xml 加入mybatis依赖和数据库连接依赖,这里我们使用 druid

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


<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.21</version>
</dependency>


<!-- alibaba的druid数据库连接池 -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.0.11</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.1.0</version>
</dependency>


2 在src/resources 下创建配置文件 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>

<properties>
<property name="dialect" value="mysql" />
</properties>

<settings>
<!-- 这个配置使全局的映射器启用或禁用缓存。系统默认值是true,设置只是为了展示出来 -->
<setting name="cacheEnabled" value="true" />
<!-- 全局启用或禁用延迟加载。当禁用时,所有关联对象都会即时加载。 系统默认值是true,设置只是为了展示出来 -->
<setting name="lazyLoadingEnabled" value="true" />
<!-- 允许或不允许多种结果集从一个单独的语句中返回(需要适合的驱动)。 系统默认值是true,设置只是为了展示出来 -->
<setting name="multipleResultSetsEnabled" value="true" />
<!--使用列标签代替列名。不同的驱动在这方便表现不同。参考驱动文档或充分测试两种方法来决定所使用的驱动。 系统默认值是true,设置只是为了展示出来 -->
<setting name="useColumnLabel" value="true" />
<!--允许 JDBC 支持生成的键。需要适合的驱动。如果设置为 true 则这个设置强制生成的键被使用,尽管一些驱动拒绝兼容但仍然有效(比如 
Derby)。 系统默认值是false,设置只是为了展示出来 -->
<setting name="useGeneratedKeys" value="false" />
<!--配置默认的执行器。SIMPLE 执行器没有什么特别之处。REUSE 执行器重用预处理语句。BATCH 执行器重用语句和批量更新 系统默认值是SIMPLE,设置只是为了展示出来 -->
<setting name="defaultExecutorType" value="SIMPLE" />
<!--设置超时时间,它决定驱动等待一个数据库响应的时间。 系统默认值是null,设置只是为了展示出来 -->
<setting name="defaultStatementTimeout" value="25000" />
</settings>

<!-- 配置实体类的别名,配置实体类别名的目的是为了在引用实体类时可以使用实体类的别名来代替实体类,达到简写的目的 -->  
    <typeAliases>  
        <package name="com.zyb.business.po"/>  
    </typeAliases>

</configuration>


3 在src/resources下创建mapper文件夹并在 application 配置文件中指定其路径


#指定bean所在包
mybatis.type-aliases-package=com.zyb.business.po
#指定映射文件
mybatis.mapperLocations=classpath:mapper/*.xml


数据库创建对应的测试表

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.zyb.business.dao.UsersDao">
<resultMap id="BaseResultMap" type="users">
<result property="id" column="id" />
<result property="userName" column="user_name" />
<result property="trueName" column="true_name" />
</resultMap>


<!-- 用于select查询公用抽取的列 -->
<sql id="Base_Column_List">
id,user_name,true_name
</sql>


<sql id="Base_Condition">
<trim prefix="WHERE" prefixOverrides="AND | OR">
<if test="userName  != null and userName  != ''"> AND user_name = #{userName} </if>
<if test="trueName  != null and trueName  != ''"> AND true_name = #{trueName} </if>
<if test="sqlWhere  != null and sqlWhere  != ''"> ${sqlWhere} </if>
</trim>
</sql>


<!-- 插入语句 -->
<insert id="insert" parameterType="users">
<selectKey resultType="Long" keyProperty="id" order="AFTER">
SELECT LAST_INSERT_ID()
</selectKey>
INSERT INTO users
<trim prefix="(" suffix=")" suffixOverrides=",">
<if test="id != null and id  != ''"> id, </if>
<if test="userName != null and userName  != ''"> user_name, </if>
<if test="trueName != null and trueName  != ''"> true_name </if>
</trim>
<trim prefix="values (" suffix=")" suffixOverrides=",">
<if test="id != null and id  != ''"> #{id}, </if>
<if test="userName != null and userName  != ''"> #{userName}, </if>
<if test="trueName != null and trueName  != ''"> #{trueName} </if>
</trim>
</insert>


<!--更新语句 -->
<update id="update" parameterType="users">
UPDATE users
<set>
<if test="userName  != null and userName  != ''"> user_name = #{userName} , </if>
<if test="trueName  != null and trueName  != ''"> true_name = #{trueName}  </if>
</set>
WHERE id = #{id}
</update>


<!--删除语句 -->
<delete id="delete" parameterType="Integer">
DELETE FROM users WHERE id = #{id}
</delete>


<!--查询语句 -->
<select id="get" resultMap="BaseResultMap">
SELECT
<include refid="Base_Column_List" />
FROM users
WHERE id = #{id}
</select>


<!--查询 -->
<select id="findAll" resultType="users" resultMap="BaseResultMap" parameterType="usersQuery">
SELECT
<include refid="Base_Column_List" />
FROM users
<include refid="Base_Condition" />
<choose>
<when test="sortBy != null and sortBy != ''">
<if test="sortType == 1"> ORDER BY ${sortBy} ASC </if>
<if test="sortType == 2"> ORDER BY ${sortBy} DESC </if>
</when>
<otherwise> ORDER BY id ASC </otherwise>
</choose>
</select>


<select id="findList" resultType="users" resultMap="BaseResultMap" parameterType="usersQuery">
SELECT
<include refid="Base_Column_List" />
FROM users
<include refid="Base_Condition" />
<choose>
<when test="sortBy != null and sortBy != ''">
<if test="sortType == 1"> ORDER BY ${sortBy} ASC </if>
<if test="sortType == 2"> ORDER BY ${sortBy} DESC </if>
</when>
<otherwise> ORDER BY id ASC </otherwise>
</choose>
<if test="startNum != null and startNum >= 0 and pageSize != null and pageSize > 0">
limit #{startNum}, #{pageSize}
</if>
</select>


<!--查询数量 -->
<select id="count" resultType="Integer" parameterType="usersQuery">
SELECT count(*) FROM users
<include refid="Base_Condition" />
</select>


</mapper>


这里的 resultType 和 parameterType 都以实体类别名的形式,实体类的别名在 mybatis-config.xml 有配置

4 编写 dao 、service 、controller层

public interface BaseDao<Q,E> {


public E get(Integer id);


public E insert(E entity);


public E update(E entity);


public Integer delete(Integer id);


public Integer count(Q query);


public Integer findList(Q query);


public List<E> findAll();


public List<E> findAll(Q query);


}


ublic class BaseService<D extends BaseDao<Q, T>, Q, T> {


@Autowired
private D dao;


public T get(Integer id) {
return dao.get(id);
}


public T insert(T entity) {
return dao.insert(entity);
}


public T update(T entity) {
return dao.update(entity);
}


public Integer delete(Integer id) {
return dao.delete(id);
}


public Integer count(Q query) {
return dao.count(query);
}


public Integer findList(Q query) {
return dao.findList(query);
}


public List<T> findAll() {
return dao.findAll();
}


public List<T> findAll(Q query) {
return dao.findAll(query);
}


}


@Mapper
public interface UsersDao extends BaseDao<UsersQuery,Users> {


}



@Service
public class UsersService extends BaseService<UsersDao, UsersQuery, Users> {


@Autowired
private UsersDao usersDao;


}


@RestController
public class UsersController {


@Autowired
private UsersService usersService;


@RequestMapping("/index")
public ModelAndView index() {
List<Users> userList = usersService.findAll(new UsersQuery());
ModelAndView model = new ModelAndView("/index");
model.addObject("userList", userList);
        return model;
}


@RequestMapping(value = "/index/list", method = { RequestMethod.GET, RequestMethod.POST })
public String list() {
return "list";
}


}





猜你喜欢

转载自blog.csdn.net/weixin_38783189/article/details/78967653