目录
- 原始jdbc开发存在的问题如下:
- ①数据库连接创建、释放频繁造成系统资源浪费从而影响系统性能
-
- ③sql语句在代码中硬编码,造成代码不易维护,实际应用sql变化的可能较大,
- sql变动需要改变java代码。
-
- ③查询操作时,需要手动将结果集中的数据手动封装到实体中。插入操作时,
- 需要手动将实体的数据设置到sql语句的占位符位置
-
-
- 应对上述问题给出的解决方案:
- ①使用数据库连接池初始化连接资源
-
- ②将sql语句抽取到xml配置文件中
-
- ③使用反射、内省等底层技术,自动将实体与表进行属性与字段的自动映射
MyBatis实现了上述的解决方案
- ①mybatis是一个优秀的基于java的持久层框架,它内部封装了jdbc,
- 使开发者只需要关注sql语句本身,而不需要花费精力去处理加载驱动、
- 创建连接、创建statement等繁杂的过程。
-
- ②mybatis通过xml或注解的方式将要执行的各种statement配置起来,
- 并通过java对象和statement中sql的动态参数进行映射生成最终执行的sql语句。
-
- ③最后mybatis框架执行sql并将结果映射为java对象并返回。
- 采用ORM思想解决了实体和数据库映射的问题,对idbc进行了封装,
- 屏蔽了jdbcapi底层访问细节,使我们不用与jdbcapi打交道,
- 就可以完成对数据库的持久化操作。
①添加MyBatis的坐标
②创建user数据表
③编写User实体类
④编写映射文件UserMapper.xml(主要写sql语句)
⑤编写核心文件SqlMapConfig.xml(配置mybatis核心配置)
⑥编写测试类
①添加pom相应的坐标
- <dependency>
- <groupId>mysqlgroupId>
- <artifactId>mysql-connector-javaartifactId>
- <version>5.1.32version>
- dependency>
- <dependency>
- <groupId>org.mybatisgroupId>
- <artifactId>mybatisartifactId>
- <version>3.4.6version>
- dependency>
- <dependency>
- <groupId>junitgroupId>
- <artifactId>junitartifactId>
- <version>4.12version>
- dependency>
- <dependency>
- <groupId>log4jgroupId>
- <artifactId>log4jartifactId>
- <version>1.2.17version>
- dependency>
②数据库中创建表
③创建pojo下的user类
- package com_mybatis.pojo;
-
- public class User {
- private int id;
- private String username;
- private String password;
-
- public int getId() {
- return id;
- }
-
- public void setId(int id) {
- this.id = id;
- }
-
- public String getUsername() {
- return username;
- }
-
- public void setUsername(String username) {
- this.username = username;
- }
-
- public String getPassword() {
- return password;
- }
-
- public void setPassword(String password) {
- this.password = password;
- }
-
- @Override
- public String toString() {
- return "User{" +
- "id=" + id +
- ", username='" + username + '\'' +
- ", password='" + password + '\'' +
- '}'+"\n";
- }
- }
④编写映射文件UserMapper.xml(主要写sql语句)
在resource下的com_mybatis/mapper/UserMapper.xml
- "1.0" encoding="UTF-8" ?>
- mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
- <mapper namespace="userMapper">
-
-
-
- <select id="findAll" resultType="com_mybatis.pojo.User">
- select * from user
- select>
-
-
- mapper>
⑤编写核心文件SqlMapConfig.xml(配置mybatis核心配置)
在resource下的SqlMapConfig.xml
- "1.0" encoding="UTF-8" ?>
- configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd">
- <configuration>
-
-
-
- <environments default="development">
- <environment id="development">
- <transactionManager type="JDBC">transactionManager>
- <dataSource type="POOLED">
- <property name="driver" value="com.mysql.jdbc.Driver"/>
- <property name="url" value="jdbc:mysql://localhost:3306/test"/>
- <property name="username" value="root"/>
- <property name="password" value="123456"/>
- dataSource>
- environment>
- environments>
-
-
-
- <mappers>
- <mapper resource="com_mybatis/mapper/UserMapper.xml">mapper>
- mappers>
-
-
- configuration>
⑥编写测试类
在java下新建一个test包下的mybatisTest类
- package com_mybatis.test;
-
- import com_mybatis.pojo.User;
- import org.apache.ibatis.io.Resources;
- import org.apache.ibatis.session.SqlSession;
- import org.apache.ibatis.session.SqlSessionFactory;
- import org.apache.ibatis.session.SqlSessionFactoryBuilder;
- import org.junit.Test;
-
- import java.io.File;
- import java.io.IOException;
- import java.io.InputStream;
- import java.util.List;
-
- public class MybatisTest {
-
- @Test
- public void test1() throws IOException {
- //获得核心配置文件
- InputStream resourceAsFile = Resources.getResourceAsStream("sqlMapConfig.xml");
- //获得session工厂对象
- SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsFile);
- //获得session会话对象
- SqlSession sqlSession = sqlSessionFactory.openSession();
- //执行操作 参数:namespace+id
- List
userList = sqlSession.selectList("userMapper.findAll"); - System.out.println(userList);
- //释放资源
- sqlSession.close();
-
-
-
- }
- }