• MyBatis框架(一)


    一、MyBatis框架概述

    ​ MyBatis 是一个优秀的基于 java 的持久层框架,它内部封装了 jdbc,使开发者只需要关注 sql 语句本身,而不需要花费精力去处理加载驱动、创建连接、创建 statement 等繁杂的过程。

    ​ MyBatis 通过 xml 或注解的方式将要执行的各种 statement 配置起来,并通过 java 对象和 statement 中sql 的动态参数进行映射生成最终执行的 sql 语句,最后由 MyBatis 框架执行 sql 并将结果映射为 java 对象并返回。

    ​ 采用 ORM(对象关系映射)思想解决了实体和数据库映射的问题,对 jdbc 进行了封装,屏蔽了 jdbc api 底层访问细节,使我们不用与 jdbc api 打交道,就可以完成对数据库的持久化操作。

    二、MyBatis快速入门

    1. 创建Maven工程

    创建 MyBatis01 的工程,工程信息如下:
    Groupid:com.itheima
    ArtifactId:MyBatis01
    Packing:jar
    

    2. 添加MyBatis的坐标

    在 pom.xml 文件中添加 MyBatis3.4.5 的坐标,如下:

         <dependencies>
         	<dependency>
         		<groupId>org.mybatis</groupId>
         		<artifactId>mybatis</artifactId>
         		<version>3.4.5</version>
         	</dependency>
         	<dependency>
         		<groupId>junit</groupId>
         		<artifactId>junit</artifactId>
         		<version>4.10</version>
         		<scope>test</scope>
         	</dependency>
         	<dependency>
         		<groupId>mysql</groupId>
                 <artifactId>mysql-connector-java</artifactId>
                 <version>5.1.6</version>
                 <scope>runtime</scope>
         	</dependency>
         	<dependency>
                 <groupId>log4j</groupId>
                 <artifactId>log4j</artifactId>
                 <version>1.2.12</version>
         	</dependency>
         </dependencies>
    

    3. 编写User实体类

    public class User implements Serializable {
        private Integer id;
        private String username;
        private Date birthday;
        private String sex;
        private String address;
        
        public Integer getId() {
        	return id; 
        }
        public void setId(Integer id) {
        	this.id = id; 
        }
        public String getUsername() {
        	return username; 
        }
        public void setUsername(String username) {
        	this.username = username; 
        }
        public Date getBirthday() {
        	return birthday; 
        }
        public void setBirthday(Date birthday) {
        	this.birthday = birthday; 
        }
        public String getSex() {
        	return sex; 
        }
        public void setSex(String sex) {
        	this.sex = sex; 
        }
        public String getAddress() {
        	return address; 
        }
        public void setAddress(String address) {
        	this.address = address; 
        }
        @Override
        public String toString() {
        	return "User [id=" + id + ", username=" + username + ", birthday=" + birthday
        		+ ", sex=" + sex + ", address="
        		+ address + "]"; 
        } 
    }
    

    4. 编写持久层接口 IUserDao

    public interface IUserDao {
        /**
        * 查询所有用户
        * @return
        */
        List<User> findAll();
    }
    

    5. 编写持久层接口的映射文件 IUserDao.xml

    要求:

    创建位置:必须和持久层接口在相同的包结构中。

    名称:必须以持久层接口名称命名文件名,扩展名是.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.itheima.dao.IUserDao">
    	<!-- 配置查询所有操作 --> 
    	<select id="findAll" resultType="com.itheima.domain.User">
    		select * from user
    	</select>
    </mapper>
    

    6. 编写 SqlMapConfig.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>
    	<!-- 配置 mybatis 的环境 --> 
    	<environments default="mysql">
    		<!-- 配置 mysql 的环境 --> 
    		<environment id="mysql">
    			<!-- 配置事务的类型 --> 
    			<transactionManager type="JDBC"></transactionManager>
    			<!-- 配置连接数据库的信息:用的是数据源(连接池) --> 
    			<dataSource type="POOLED"> 
    				<property name="driver" value="com.mysql.jdbc.Driver"/>
    				<property name="url" value="jdbc:mysql://localhost:3306/ee50"/>
                    <property name="username" value="root"/>
                    <property name="password" value="1234"/>
    			</dataSource>
    		</environment>
    	</environments>
    	
    	<!-- 告知 mybatis 映射配置的位置 --> 
    	<mappers> 
    		<mapper resource="com/itheima/dao/IUserDao.xml"/>
    	</mappers>
    </configuration>
    

    7. 编写测试类

    public class MybatisTest {
    	
    	public static void main(String[] args)throws Exception {
            //1.读取配置文件
            InputStream in = Resources.getResourceAsStream("SqlMapConfig.xml");
            //2.创建 SqlSessionFactory 的构建者对象
            SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
            //3.使用构建者创建工厂对象 SqlSessionFactory
            SqlSessionFactory factory = builder.build(in);
            //4.使用 SqlSessionFactory 生产 SqlSession 对象
            SqlSession session = factory.openSession();
            //5.使用 SqlSession 创建 dao 接口的代理对象
            IUserDao userDao = session.getMapper(IUserDao.class);
            //6.使用代理对象执行查询所有方法
            List<User> users = userDao.findAll();
            for(User user : users) {
            	System.out.println(user);
            }
            //7.释放资源
            session.close();
            in.close();
    	} 
    }
    

    8. 注意事项

    • 在MyBatis中把持久层的操作接口名称和映射文件也叫做:Mapper。所以IUserDao和IUserMapper是一样的。

    • 在IDEA中创建目录时,它和包是不一样的。

      包在创建时:com.itheima.dao它是三级目录;

      目录在创建时:com.itheima.dao它是一级目录。

    • MyBatis的映射配置文件位置必须和dao接口的包结构相同。

    • 映射配置文件的mapper标签的namespace属性的取值必须是dao接口的全限定类名。

    • 在映射配置文件的操作配置中(如select),id属性的取值必须是dao接口的方法名。

    • 在映射配置文件的操作配置中(如select),resultType属性用来指定返回的数据应该被封装到哪个类中。

    9. 补充(基于注解的 MyBatis 使用)

    (1) 在持久层接口中添加注解

    public interface IUserDao {
        /**
        * 查询所有用户
        * @return
        */
        @Select("select * from user")
        List<User> findAll();
    }
    

    (2)修改 SqlMapConfig.xml

    <!-- 告知 mybatis 映射配置的位置 --> 
    <mappers> 
    	<mapper class="com.itheima.dao.IUserDao"/>
    </mappers>
    

    (3)注意事项

    ​ 在使用基于注解的 MyBatis 配置时,请删除 xml 的映射配置(IUserDao.xml)。

    三、Spring Boot整合MyBatis

    1. 添加MyBatis的起步依赖

    <!--mybatis起步依赖-->
    <dependency>
        <groupId>org.mybatis.spring.boot</groupId>
        <artifactId>mybatis-spring-boot-starter</artifactId>
        <version>1.1.1</version>
    </dependency>
    

    2. 添加数据库驱动坐标

    <!-- MySQL连接驱动 -->
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
    </dependency>
    

    3. 添加数据库连接信息

    在application.properties中添加数据量的连接信息

    #DB Configuration:
    spring.datasource.driverClassName=com.mysql.jdbc.Driver
    spring.datasource.url=jdbc:mysql://127.0.0.1:3306/test?useUnicode=true&characterEncoding=utf8
    spring.datasource.username=root
    spring.datasource.password=root
    

    4. 创建user表

    在test数据库中创建user表

    -- ----------------------------
    -- Table structure for `user`
    -- ----------------------------
    DROP TABLE IF EXISTS `user`;
    CREATE TABLE `user` (
      `id` int(11) NOT NULL AUTO_INCREMENT,
      `username` varchar(50) DEFAULT NULL,
      `password` varchar(50) DEFAULT NULL,
      `name` varchar(50) DEFAULT NULL,
      PRIMARY KEY (`id`)
    ) ENGINE=InnoDB AUTO_INCREMENT=10 DEFAULT CHARSET=utf8;
    
    -- ----------------------------
    -- Records of user
    -- ----------------------------
    INSERT INTO `user` VALUES ('1', 'zhangsan', '123', '张三');
    INSERT INTO `user` VALUES ('2', 'lisi', '123', '李四');
    

    5. 创建实体Bean

    public class User {
        // 主键
        private Long id;
        // 用户名
        private String username;
        // 密码
        private String password;
        // 姓名
        private String name;
      
        //此处省略getter和setter方法 .. ..
        
    }
    

    6. 编写Mapper

    @Mapper
    public interface UserMapper {
    	public List<User> queryUserList();
    }
    

    注意:@Mapper标记该类是一个MyBatis的mapper接口,可以被Spring Boot自动扫描到spring上下文中

    7. 配置Mapper映射文件

    在srcmain esourcesmapper路径下加入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.itheima.mapper.UserMapper">
        <select id="queryUserList" resultType="User">
            select * from user
        </select>
    </mapper>
    

    8. 在application.properties中添加MyBatis的信息

    #spring集成Mybatis环境
    #pojo别名扫描包
    mybatis.type-aliases-package=com.itheima.domain
    #加载Mybatis映射文件
    mybatis.mapper-locations=classpath:mapper/*Mapper.xml
    

    9. 编写测试Controller

    @Controller
    public class MapperController {
    
        @Autowired
        private UserMapper userMapper;
    
        @RequestMapping("/queryUser")
        @ResponseBody
        public List<User> queryUser(){
            List<User> users = userMapper.queryUserList();
            return users;
        }
    
    }
    

    10. 测试

  • 相关阅读:
    响应式开发: 宽高等比例缩放
    node服务成长之路
    node压力测试
    前端开发工具
    sequelize问题集锦
    webpack引入handlebars报错'You must pass a string or Handlebars AST to Handlebars.compile'
    夏夜无题
    jmeter在windows环境下系统参数设置
    服务端性能优化指南
    修车备忘
  • 原文地址:https://www.cnblogs.com/jiajun107/p/13236284.html
Copyright © 2020-2023  润新知