源码网商城,靠谱的源码在线交易网站 我的订单 购物车 帮助

源码网商城

MyBatis 使用权威指南

  • 时间:2022-12-10 14:48 编辑: 来源: 阅读:
  • 扫一扫,手机访问
摘要:MyBatis 使用权威指南
[b]什么是 MyBatis[/b] [img]http://img.1sucai.cn/uploads/article/2018010710/20180107100145_0_47139.jpg[/img] MyBatis 是支持定制化 SQL、存储过程以及高级映射的优秀的持久层框架。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以对配置和原生Map使用简单的 XML 或注解,将接口和 Java 的 POJOs(Plain Old Java Objects,普通的 Java对象)映射成数据库中的记录。 [b]SpringBoot 中使用[/b] [b]使用 Maven[/b] 在你的pom.xml中:
<dependency>
  <groupId>org.mybatis.spring.boot</groupId>
  <artifactId>mybatis-spring-boot-starter</artifactId>
  <version>1.2.1-SNAPSHOT</version>
</dependency>
[b]使用 Gradle[/b] 在你的 build.gradle中:
dependencies {
  compile("org.mybatis.spring.boot:mybatis-spring-boot-starter:1.2.1-SNAPSHOT")
}
[b]使用[/b] 目录结构
--src 
 --main
 --java
  --com.example
  --dao
   --UserDao.java
  --entity
   --User.java
  --DemoApplication.java
  --UserSex.java
 --resources
 --mapper
  --UserMapper.xml
 --application.properties
[b]基于注解[/b] 使用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);
  }
}
结果如下 结果 [b]基于 XML 配置[/b] 在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);
 }
}
[b]总结[/b] mybatis-spring-boot-starter可以快速的通过注解来开发,十分方便,可以灵活的使用 SQL 和调整 SQL,具体用注解还是基于 XML,我觉得还是看自己的喜好。 [b]下面看下#{}和${}的区别[/b] #{}在底层实现上使用?做占位符来生成PreparedStatement,然后将参数传入,大多数情况都应使用这个,它更快、更安全。 ${}将传入的数据直接显示生成在sql中。如:order by ${user_id},如果传入的值是111,那么解析成sql时的值为order by 111, 如果传入的值是id,则解析成的sql为order by id. 以上所述是小编给大家介绍的MyBatis 使用指南,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对编程素材网网站的支持!
  • 全部评论(0)
联系客服
客服电话:
400-000-3129
微信版

扫一扫进微信版
返回顶部