当前位置:   article > 正文

Mabatis-入门

mabatis

一、认识Mybatis

mybatis参考网址http://www.mybatis.org/mybatis-3/zh/index.html

Github源码地址https://github.com/mybatis/mybatis-3

二、ORM是什么

对象-关系映射(Object Relational Mapping,简称ORM),是随着面向对象的软件开发方法发展而产生的。把对象模型表示的对象映射到基于SQL 的关系模型数据库结构中去。在具体的操作实体对象的时候,就不需要再去和复杂的 SQL 语句打交道,只需简单的操作实体对象的属性和方法 。ORM 技术是在对象和关系之间提供了一条桥梁,前台的对象型数据和数据库中的关系型的数据通过这个桥梁来相互转化 。

三、Demo

开发步骤:

1、创建user表
2、pom.xml引入配置
3、编写全局配置文件:SqlMapConfig.xml
4、编写映射文件 :UserMapper.xml
5、编写dao代码:UserDao接口、UserDaoImpl实现类
6、POJO类
7、单元测试类

(1)创建user表

  1. CREATE TABLE `user` (
  2.   `id` int(11) NOT NULL AUTO_INCREMENT,
  3.   `username` varchar(32) NOT NULL COMMENT '用户名称',
  4.   `birthday` date DEFAULT NULL COMMENT '生日',
  5.   `sex` char(1) DEFAULT NULL COMMENT '性别',
  6.   `address` varchar(256) DEFAULT NULL COMMENT '地址',
  7.   PRIMARY KEY (`id`)
  8. ) ENGINE=InnoDB AUTO_INCREMENT=32 DEFAULT CHARSET=utf8;
  9. /*Data for the table `user` */
  10. insert  into `user`(`username`,`birthday`,`sex`,`address`) values ('王五',NULL,'2',NULL),(10,'张三','2014-07-10','1','北京市');

(2)pom.xml引入配置

  1. <dependencies>
  2. <!-- mybatis依赖 -->
  3. <dependency>
  4. <groupId>org.mybatis</groupId>
  5. <artifactId>mybatis</artifactId>
  6. <version>3.4.6</version>
  7. </dependency>
  8. <!-- mysql依赖 -->
  9. <dependency>
  10. <groupId>mysql</groupId>
  11. <artifactId>mysql-connector-java</artifactId>
  12. <version>5.1.35</version>
  13. </dependency>
  14. <!-- 单元测试 -->
  15. <dependency>
  16. <groupId>junit</groupId>
  17. <artifactId>junit</artifactId>
  18. <version>4.12</version>
  19. </dependency>
  20. </dependencies>

(3)编写全局配置文件:SqlMapConfig.xml

  1. <?xml version="1.0" encoding="UTF-8" ?>
  2. <!DOCTYPE configuration
  3. PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
  4. "http://mybatis.org/dtd/mybatis-3-config.dtd">
  5. <configuration>
  6. <!-- mybatis 数据源环境配置 -->
  7. <!-- 映入数据库配置文件 -->
  8. <properties resource="db.properties"></properties>
  9. <environments default="development">
  10. <environment id="development">
  11. <!-- 配置数据源信息 -->
  12. <transactionManager type="JDBC" />
  13. <dataSource type="POOLED">
  14. <property name="driver" value="${db.driver}" />
  15. <property name="url" value="${db.url}" />
  16. <property name="username" value="${db.username}" />
  17. <property name="password" value="${db.password}" />
  18. </dataSource>
  19. </environment>
  20. </environments>
  21. <!-- 映射文件加载 -->
  22. <mappers>
  23. <mapper resource="mapper/UserMapper.xml" />
  24. </mappers>
  25. </configuration>

(4)编写映射文件 :UserMapper.xml

  1. <?xml version="1.0" encoding="UTF-8" ?>
  2. <!DOCTYPE mapper
  3. PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  4. "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
  5. <mapper namespace="user">
  6. <!-- select标签,封装了SQL语句信息、入参类型、结果映射类型 -->
  7. <select id="findUserById" parameterType="java.lang.Integer"
  8. resultType="com.zzq.mybatis.entity.User">
  9. SELECT * FROM user WHERE id = #{id}
  10. </select>
  11. </mapper>

(5)编写dao代码:UserDao接口、UserDaoImpl实现类

  1. package com.zzq.mybatis.dao;
  2. import com.zzq.mybatis.entity.User;
  3. public interface UserDao {
  4. public User findUserById(int id);
  5. }
  1. package com.zzq.mybatis.dao;
  2. import org.apache.ibatis.session.SqlSession;
  3. import org.apache.ibatis.session.SqlSessionFactory;
  4. import com.zzq.mybatis.entity.User;
  5. public class UserDaoImpl implements UserDao {
  6. private SqlSessionFactory sqlSessionFactory;
  7. // 注入sqlSessionFactory
  8. public UserDaoImpl(SqlSessionFactory sqlSessionFactory) {
  9. this.sqlSessionFactory = sqlSessionFactory;
  10. }
  11. public User findUserById(int id) {
  12. // sqlsessionFactory工厂类去创建sqlsession会话
  13. SqlSession sqlSession = sqlSessionFactory.openSession();
  14. // sqlsession接口,使用它对数据库进行增删改查操作
  15. User user = sqlSession.selectOne("user.findUserById", id);
  16. return user;
  17. }
  18. }

(6)POJO类

  1. package com.zzq.mybatis.entity;
  2. import java.util.Date;
  3. public class User {
  4. private int id;
  5. private String username;
  6. private Date birthday;
  7. private String sex;
  8. private String address;
  9. public int getId() {
  10. return id;
  11. }
  12. public void setId(int id) {
  13. this.id = id;
  14. }
  15. public String getUsername() {
  16. return username;
  17. }
  18. public void setUsername(String username) {
  19. this.username = username;
  20. }
  21. public Date getBirthday() {
  22. return birthday;
  23. }
  24. public void setBirthday(Date birthday) {
  25. this.birthday = birthday;
  26. }
  27. public String getSex() {
  28. return sex;
  29. }
  30. public void setSex(String sex) {
  31. this.sex = sex;
  32. }
  33. public String getAddress() {
  34. return address;
  35. }
  36. public void setAddress(String address) {
  37. this.address = address;
  38. }
  39. @Override
  40. public String toString() {
  41. return "User [id=" + id + ", username=" + username + ", birthday=" + birthday + ", sex=" + sex + ", address="
  42. + address + "]";
  43. }
  44. }

(7)单元测试类

  1. package com.zzq.mybatis.test;
  2. import java.io.InputStream;
  3. import org.apache.ibatis.io.Resources;
  4. import org.apache.ibatis.session.SqlSessionFactory;
  5. import org.apache.ibatis.session.SqlSessionFactoryBuilder;
  6. import org.junit.Before;
  7. import org.junit.Test;
  8. import com.zzq.mybatis.dao.UserDao;
  9. import com.zzq.mybatis.dao.UserDaoImpl;
  10. import com.zzq.mybatis.entity.User;
  11. public class Test1 {
  12. private SqlSessionFactory sqlSessionFactory;
  13. @Before
  14. public void init() throws Exception{
  15. //加载全局配置文件
  16. String resource = "SqlMapConfig.xml";
  17. InputStream inputStream = Resources.getResourceAsStream(resource);
  18. // sqlsessionFactory需要通过sqlsessionFactoryBuilder读取全局配置文件信息
  19. sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
  20. }
  21. @Test
  22. public void testFindUserById() {
  23. UserDao dao = new UserDaoImpl(sqlSessionFactory);
  24. User user = dao.findUserById(1);
  25. System.out.println(user);
  26. }
  27. }

(8)效果


 mybatis执行步骤: 

 1、加载全局配置文件 SqlMapConfig.xml,通过Resources对象获取全局配置文件
 2、通过SqlSessionFactoryBuilder构建会话工厂SqlSessionFactory
 3、通过会话工厂SqlSessionFactory得到会话SqlSession,
 4、通过SqlSession执行CRUP操作
 5、通过SqlSession提交事物
 6、通过SqlSession关闭会话


 #{}和${}区别

区别1

#{} :相当于JDBC SQL语句中的占位符? (PreparedStatement)

${} :相当于JDBC SQL语句中的连接符合 + (Statement)

区别2

#{} : 进行输入映射的时候,会对参数进行类型解析(如果是String类型,那么SQL语句会自动加上’’)

${} :进行输入映射的时候,将参数原样输出到SQL语句中

区别3

#{} : 如果进行简单类型(String、Date、8种基本类型的包装类)的输入映射时,#{}中参数名称可以任意

${} :如果进行简单类型(String、Date、8种基本类型的包装类)的输入映射时,${}中参数名称必须是value

区别4

${} :存在SQL注入问题 ,使用OR 1=1 关键字将查询条件忽略

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Gausst松鼠会/article/detail/114899
推荐阅读
相关标签
  

闽ICP备14008679号