MyBatis 使用权威指南

网友投稿 204 2023-05-31


MyBatis 使用权威指南

什么是 MyBatis

MyBatis 是支持定制化 SQL、存储过程以及高级映射的优秀的持久层框架。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以对配置和原生Map使用简单的 XML 或注解,将接口和 java 的 POJOs(Plain Old Java Objects,普通的 Java对象)映射成数据库中的记录。

SpringBoot 中使用

使用 Maven

在你的pom.xml中:

org.mybatis.spring.boot

mybatis-spring-boot-starter

1.2.1-SNAPSHOT

使用 Gradle

在你的 build.gradle中:

dependencies {

compile("org.mybatis.spring.boot:mybatis-spring-boot-starter:1.2.1-SNAPSHOT")

}

使用

目录结构

--src

--main

--java

--com.example

--dao

--UserDao.javhttp://a

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

INSERT INTO user (user_name,password,user_sex ) VALUES (#{userName},#{password},#{userSex})

DELETE FROM user where id = #{id}

UPDATE user SET user_name = #{userName}, nick_name =#{nickName} WHERE id = #{id}

SELECT * FROM user WHERE id = #{id}

然后将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 使用指南,希望对大家有所帮助,如果大家有任何疑问请给我留言,会及时回复大家的。在此也非常感谢大家对我们网站的支持!


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:window下安装和配置maven环境
下一篇:eclipse中maven插件安装教程
相关文章

 发表评论

暂时没有评论,来抢沙发吧~