第一个Mybatis程序
Mybatis
2、第一个Mybatis程序
- 思路:搭建环境-->导入Mybatis-->编写代码-->测试!
2.1、搭建环境
-
搭建数据库
-
CREATE DATABASE ibatis; USE ibatis; CREATE TABLE USER( id INT(20) NOT NULL PRIMARY KEY, NAME VARCHAR(30) DEFAULT NULL, pwd VARCHAR(30) DEFAULT NULL )ENGINE=INNODB DEFAULT CHARSET=utf8; INSERT INTO USER(id,NAME,pwd) VALUES (1,'admin','ADMIN'), (2,'6','6'), (3,'ER','ER');
-
-
新建项目
-
新建一个普通的maven项目。
-
删除src目录。
-
导入maven依赖。
-
<!--父工程--> <groupId>com.jcooling.edu</groupId> <artifactId>mybatisstudy</artifactId> <packaging>pom</packaging> <version>1.0-SNAPSHOT</version> <modules> <module>mybatis-01</module> </modules> <dependencies> <!--mybatis--> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.5.2</version> </dependency> <!--mysql驱动--> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.30</version> </dependency> <!--junit--> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> </dependency> </dependencies>
-
-
2.2、创建一个模块
-
编写mybatis的核心配置文件(mybatis-config.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核心配置文件--> <configuration> <environments default="development"> <environment id="development"> <!--transactionManager事务管理--> <transactionManager type="JDBC"/> <dataSource type="POOLED"> <property name="driver" value="com.mysql.jdbc.Driver"/> <property name="url" value="jdbc:mysql://localhost:3306/ibatis?useSSL=true&useUnicode=true&sun.misc.CharacterEncoder=UTF-8"/> <property name="username" value="root"/> <property name="password" value="123456"/> </dataSource> </environment> </environments> <mappers> </mappers> </configuration>
-
编写mybatis工具类。
-
//工具类 //sqlSessionFactory-->sqlSession public class MybatisUtils { private static SqlSessionFactory sqlSessionFactory; static { try { //使用Mybatis第一步:获取sqlSessionFactory对象 String resource="mybatis-config.xml"; InputStream inputStream = Resources.getResourceAsStream(resource); sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream); } catch (IOException e) { e.printStackTrace(); } } //既然有了 SqlSessionFactory,顾名思义,我们可以从中获得 SqlSession 的实例。 // SqlSession 提供了在数据库执行 SQL 命令所需的所有方法。 // 你可以通过 SqlSession 实例来直接执行已映射的 SQL 语句。 public static SqlSession getSqlSession(){ return sqlSessionFactory.openSession(); } }
-
-
2.3 、编写代码
-
实体类
-
package com.jcooling.pojo; //实体类 public class User { private int id; private String name; private String pwd; //无参 public User() { } //有参 public User(int id, String name, String pwd) { this.id = id; this.name = name; this.pwd = pwd; } //get/set方法 //toString方法 }
-
-
dao接口
-
public interface UserDao { List<User> getUserList(); }
-
public interface UserMapper{ List<User> getUserList(); }
-
-
接口实现类
-
public class UserDaoImpl implements UserDao{ public List<User> getUserList() { //执行sql String sql="select * from user"; return null; } }
-
接口实现类由原来的UserDaoImpl转变为一个Mapper配置文件。
-
<?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"> <!--namespace=绑定一个对应的Dao/Mapper接口--> <mapper namespace="com.jcooling.dao.UserDao"> <!--select查询语句--> <select id="getUserList" resultType="com.jcooling.pojo.User"> select * from user; </select> </mapper>
-
2.4、测试
-
注意点:
-
org.apache.ibatis.binding.BindingException: Type interface com.jcooling.dao.UserMapper is not known to the MapperRegistry.
-
<mappers> <mapper resource="mapper/UserMapper.xml"></mapper> </mappers>
-
maven由于他的约定大于配置,我们之后可以能遇到我们写的配置文件,无法被导出或者生效的问题,解决方案:(如果资源写在resources,不用这段代码,按需要来选择)。
-
<!--在build中配置resources,来防止我们资源导出失败的问题--> <!--pom.xml--> <build> <resources> <resource> <directory>src/main/resources</directory> <includes> <include>**/*.properties</include> <include>**/*.xm1</include> </includes> <filtering>true</filtering> </resource> <resource> <directory>src/main/java</directory> <includes> <include>**/*.properties</include> <include>**/*.xm1</include> </includes> <filtering>true </filtering> </resource> </resources> </build>
-
-
MapperRegistry是什么?
- 核心配置文件中注册 mappers。
-
junit测试
-
@Test public void testSelectAll(){ SqlSession sqlSession = null; try { //第一步:获取SqlSession对象 sqlSession = MybatisUtils.getSqlSession(); //执行SQL语句 //方式一:getMapper UserMapper mapper=sqlSession.getMapper(UserMapper.class); List<User> userList = mapper.getUserList(); //方式二: /* List<User> userList=sqlSession.selectList("com.jcooling.dao.UserMapper.getUserList");*/ for (User user : userList) { System.out.println(user); } } catch (Exception e) { e.printStackTrace(); } finally { //关闭SqlSession sqlSession.close(); } }
-
可能会遇到的问题:
- 配置文件没有注册。
- 绑定接口错误。
- 方法名不对。
- 返回类型不对。
- Maven导出资源问题。
-