这里有新鲜出炉的MyBatis教程,程序狗速度看过来!
MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并且改名为MyBatis 。
MyBatis 是支持定制化 SQL、存储过程以及高级映射的优秀的持久层框架。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集,本文给大家介绍MyBatis 使用指南,一起看看吧
什么是 MyBatis
MyBatis 是支持定制化 SQL、存储过程以及高级映射的优秀的持久层框架。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以对配置和原生Map使用简单的 XML 或注解,将接口和 Java 的 POJOs(Plain Old Java Objects,普通的 Java对象)映射成数据库中的记录。
SpringBoot 中使用
使用 Maven
在你的pom.xml中:
- <dependency>
- <groupId>org.mybatis.spring.boot</groupId>
- <artifactId>mybatis-spring-boot-starter</artifactId>
- <version>1.2.1-SNAPSHOT</version>
- </dependency>
使用 Gradle
在你的 build.gradle中:
- dependencies {
- compile("org.mybatis.spring.boot:mybatis-spring-boot-starter:1.2.1-SNAPSHOT")
- }
使用
目录结构
- --src
- --main
- --java
- --com.example
- --dao
- --UserDao.java
- --entity
- --User.java
- --DemoApplication.java
- --UserSex.java
- --resources
- --mapper
- --UserMapper.xml
- --application.properties
基于注解
使用MyBatis-Spring-Boot-Starter will:
将自动检测存在的数据源
将数据源输入然后创建注册一个SqlSessionFactoryBean实例
从SqlSessionFactoryBean中创建注册一个SqlSessionTemplate实例
自动扫描你的 mappers,将它们连接到SqlSessionTemplate然后将它们注册到 Spring 的上下文
我们新建一个实体类User.java,在这里我们使用 Lombok (使用说明见这篇文章)来简化代码
- @Data
- public class User {
- private Long id;
- private String userName;
- private String password;
- private UserSex userSex;
- private String nickName;
- }
接着我们创建一张叫 user的表
- DROP TABLE IF EXISTS user;
- CREATE TABLE user(
- id BIGINT(20) NOT NULL AUTO_INCREMENT COMMENT '主键id',
- user_name VARCHAR(32) DEFAULT NULL COMMENT '用户名',
- password VARCHAR(32) DEFAULT NULL COMMENT '密码',
- user_sex VARCHAR(32) DEFAULT NULL ,
- nick_name VARCHAR(32) DEFAULT NULL ,
- PRIMARY KEY (id)
- ) ENGINE = InnoDB DEFAULT CHARSET = utf8;
然后创建一个 Dao 文件UserDao.java
- @Mapper
- public interface UserDao {
- @Select("SELECT * FROM user WHERE id = #{id}")
- @Results({
- @Result(property = "userName", column = "user_name"),
- @Result(property = "password", column = "password"),
- @Result(property = "userSex", column = "user_sex", javaType = UserSex.class),
- @Result(property = "nickName",column = "nick_name")
- })
- User findById(@Param("id") Long id);
- @Insert("INSERT INTO user (user_name,password,user_sex ) VALUES (#{userName},#{password},#{userSex})")
- void save(User user);
- @Update("UPDATE user set user_name = #{userName}, nick_name = #{nickName} WHERE id = #{id}")
- void update(User user);
- @Delete("DELETE FROM user where id = #{id}")
- void remove(Long id);
- }
每个方法都对应的对应的 sql 语句,其中@Select注解用于查询,@Result注解将实体类属性跟数据库的字段一一对应,@Insert注解用于插入数据,@Update注解用于修改数据,@Delete注解用于删除
接下来我们简单的测试下
- @RunWith(SpringRunner.class)
- @SpringBootTest
- public class UserMapperTest {
- @Autowired
- UserDao userDao;
- @Test
- public void test(){
- User one = new User();
- one.setUserName("张三");
- one.setPassword("123456");
- one.setUserSex(UserSex.MAN);
- userDao.save(one);
- User two = new User();
- two.setUserName("李四");
- two.setPassword("123456");
- two.setUserSex(UserSex. WOMAN);
- userDao.save(two);
- }
- }
结果如下
结果
基于 XML 配置
在application.properties配置文件中新增以下配置
- mybatis.type-aliases-package= com.example.entity
- mybatis.mapper-locations=classpath:mapper/*.xml
然后在resources文件夹中创建mapper文件夹,然后新建一个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.dao.UserDao">
- <resultMap id="userMap" type="com.example.entity.User">
- <result column="id" property="id" />
- <result column="user_name" property="userName" />
- <result column="password" property="password" />
- <result column="user_sex" property="userSex" javaType="com.example.UserSex"
- />
- <result column="nick_name" property="nickName" />
- </resultMap>
- <insert id="save" parameterType="com.example.entity.User">
- INSERT INTO user (user_name,password,user_sex ) VALUES (#{userName},#{password},#{userSex})
- </insert>
- <delete id="remove" parameterType="java.lang.Long">
- DELETE FROM user where id = #{id}
- </delete>
- <update id="update" parameterType="com.example.entity.User">
- UPDATE user SET user_name = #{userName}, nick_name =#{nickName} WHERE
- id = #{id}
- </update>
- <select id="findById" parameterType="java.lang.Long" resultMap="userMap">
- SELECT * FROM user WHERE id = #{id}
- </select>
- </mapper>
然后将UserDao.java文件修改如下
- public interface UserDao {
- User findById(Long id);
- void save(User user);
- void update(User user);
- void remove(Long id);
- }
最后在SpringBoot的主程序上加上@MapperScan的注解将 dao 文件跟 sql 语句对应起来
- @SpringBootApplication
- @MapperScan("com.example.dao")
- public class DemoApplication {
- public static void main(String[] args) {
- SpringApplication.run(DemoApplication.class, args);
- }
- }
总结
mybatis-spring-boot-starter可以快速的通过注解来开发,十分方便,可以灵活的使用 SQL 和调整 SQL,具体用注解还是基于 XML,我觉得还是看自己的喜好。
下面看下#{}和${}的区别
#{}在底层实现上使用?做占位符来生成PreparedStatement,然后将参数传入,大多数情况都应使用这个,它更快、更安全。
${}将传入的数据直接显示生成在sql中。如:order by ${user_id},如果传入的值是111,那么解析成sql时的值为order by 111, 如果传入的值是id,则解析成的sql为order by id.
以上所述是小编给大家介绍的MyBatis 使用指南,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对PHPERZ网站的支持!
来源: http://www.phperz.com/article/17/1209/357864.html