码迷,mamicode.com
首页 > 其他好文 > 详细

MyBatis框架

时间:2020-07-04 21:09:50      阅读:62      评论:0      收藏:0      [点我收藏+]

标签:nfa   扩展名   配置连接   cti   source   坐标   ring   namespace   结果   

一、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映射文件

在src\main\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.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. 测试

技术图片

MyBatis框架

标签:nfa   扩展名   配置连接   cti   source   坐标   ring   namespace   结果   

原文地址:https://www.cnblogs.com/jiajun107/p/13236284.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!