一、练习第一个 MyBatis 程序
1、创建 MyBatis 项目的步骤
- 第一步:创建一个普通的 maven工程( IDEA)
- maven 工程 目录结构
- Java 层级下主要用来存放Java代码
- dto 存放实体类
- mapper 存放 mapper 接口
- resources 层级下主要用来存放配置文件
- pom.xml 文件用来存放工程所需要的依赖
- maven 工程 目录结构
- 第二步:打开maven工程的pom.xml文件,将下面的依赖添加到标签中,并将这些依赖引入到项目里
<dependencies> // 引入 mybatis 框架 <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.5.1</version> </dependency> // 引入 MySQL 数据库驱动 <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.47</version> </dependency> // 配置 junit 程序测试依赖 <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> <scope>test</scope> </dependency> </dependencies>
-
第三步:创建 MySQL 数据库,并创建一张人员表,以及一些人员信息
--创建数据库的基础sql语句 CREATE DATABASE `mybatis`; USE `mybatis`; ----------------------------------------------------------------------- --在数据库中创建表 CREATE TABLE `user` ( `id` INT(32) NOT NULL COLLATE 'utf8mb4_unicode_ci', `name` VARCHAR(32) NULL DEFAULT NULL COLLATE 'utf8mb4_unicode_ci', `pwd` VARCHAR(16) NULL DEFAULT NULL COLLATE 'utf8mb4_unicode_ci', `age` VARCHAR(11) NULL DEFAULT NULL, `sex` VARCHAR(1) NULL DEFAULT NULL COMMENT '0:女,1:男' COLLATE 'utf8mb4_unicode_ci', `status` VARCHAR(1) NULL DEFAULT NULL COMMENT '1:正常,2:vip,9:禁止登录' COLLATE 'utf8mb4_unicode_ci', PRIMARY KEY (`id`) ) COLLATE='utf8mb4_unicode_ci' ENGINE=InnoDB; ----------------------------------------------------------------------- --向表中添加一些人员信息数据 INSERT INTO `user` (`id`, `name`, `pwd`, `age`, `sex`, `status`) VALUES (1, 'admin', '123456', 30, '1', '1'); INSERT INTO `user` (`id`, `name`, `pwd`, `age`, `sex`, `status`) VALUES (2, '张飞', '123456', 20, '1', '1'); INSERT INTO `user` (`id`, `name`, `pwd`, `age`, `sex`, `status`) VALUES (3, '李白', '123456', 25, '1', '1'); INSERT INTO `user` (`id`, `name`, `pwd`, `age`, `sex`, `status`) VALUES (4, '姚青', '123456', 21, '0', '1');
-
第四步:在 resources 文件下创建 MyBatis 总配置文件(配置数据库连接),与写 sql 的 xml 文件形成映射关系
<?xml version="1.0" encoding="UTF8"?> <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD SQL Map Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd"> <configuration> <!-- 配置环境 。default名字随意起 --> <environments default="mysql"> <!-- id必须和上面的 default 保持一致 --> <environment id="mysql"> <!-- 配置事务管理器类型,JDBC 是 JdbcTransactionFactory.class 的别名 --> <transactionManager type="JDBC"></transactionManager> <!-- 配置数据源。POOLED 是 PooledDataSourceFactory.class 的别名 --> <dataSource type="POOLED"> <property name="driver" value="com.mysql.jdbc.Driver"/> <property name="url" value="数据库连接的 URL"/> <property name="username" value="数据库名称"/> <property name="password" value="数据库密码"/> </dataSource> </environment> </environments> <mappers> <!-- 配置写sql的xml文件,该文件需要是在resources文件下,不然扫描不到该文件 --> <mapper resource="mapper/XXX.xml"></mapper> </mappers> </configuration>
-
第五步:在 maven 工程的 Java 目录下创建实体类,与数据库的表是相互对应的关系
// IDEA比较智能,实体类的get和set方法可以使用快捷键生成(Fn+Alt+insert) public class User { private int id; private String name; private String pwd; private String age; private String sex; private String status; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getPwd() { return pwd; } public void setPwd(String pwd) { this.pwd = pwd; } public String getAge() { return age; } public void setAge(String age) { this.age = age; } public String getSex() { return sex; } public void setSex(String sex) { this.sex = sex; } public String getStatus() { return status; } public void setStatus(String status) { this.status = status; } }
-
第六步:创建 mapper 接口
public interface IUserMapper { // 查询user表中的人员信息 List<User> query(); // 添加人员信息 int add(User user); // 修改人员信息 int updateById(User user); // 删除人员信息 int deleteById(int id); // 根据用户 ID 查询单条数据 List<User> queryById(int id); // 根据用户姓氏进行模糊查询 List<User> queryByName(String name); // 查询总人员数 int queryCount(); }
-
第七步:创建 对应 mapper 的 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"> <!-- namespace 指定 mapper 接口的全路径 --> <mapper namespace="com.demo_01.mapper.IUserMapper" > <!-- id 指定 mapper 接口的抽象方法 ,resultType指定返回值类型,此处指定实体类 --> <select id="query" resultType="com.demo_01.entity.User"> select id,name,pwd from user </select> <!-- parameterType 属性指定传入参数类型 --> <insert id="add" parameterType="com.demo_01.entity.User"> insert into user (id,name,pwd,age,sex,status) values(#{id},#{name},#{pwd},#{age},#{sex},#{status}) </insert> <update id="updateById" parameterType="com.demo_01.entity.User"> update user set name=#{name},pwd=#{pwd},age=#{age} where id=#{id} </update> <delete id="deleteById"> delete from user where id=#{id} </delete> <select id="queryById" resultType="com.demo_01.entity.User"> select id,name,pwd,age,sex,status from user where id=#{id} </select> <select id="queryByName" resultType="com.demo_01.entity.User"> select id,name,pwd,age,sex,status from user where name like #{name} </select> <select id="queryCount" resultType="int"> select count(id) from user </select> </mapper>
-
第八步:创建曾删改查对应的 测试类 ,测试类会调用 mapper 接口的抽象方法,抽象方法调用 xml 并与总的配置文件做出映射实现数据库数据的增删改查操作。
-
新增方法测试
// 添加人员信息测试 public class addMain { @Test public void testSave() throws IOException { /* 1. 读取 mybatis-config.xml 自定义命名的全局配置文件. getResourceAsStream 使用的资源路径 */ InputStream inputStream = Resources.getResourceAsStream("mybatis-config.xml"); // 2. 使用sqlSession的工厂构造器来读入全局配置,再生成一个sqlSession工厂. SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream); // 3. 通过 sqlSession 工厂打开一个 sqlSession SqlSession sqlSession = sqlSessionFactory.openSession(); try { //4 使用SqlSession创建Dao接口的代理对象 IUserMapper mapper = sqlSession.getMapper(IUserMapper.class); //创建user对象,封装要保存的数据 User user = new User(); user.setId(8); user.setName("馒头"); user.setPwd("123456"); user.setAge("20"); user.setSex("1"); user.setStatus("1"); int num = mapper.add(user); //将数据提交到数据库中 sqlSession.commit();//全部正常执行后,提交事务 System.out.println("添加 " + num + " 条记录"); } catch (Exception e) { e.printStackTrace(); sqlSession.rollback();//抛异常(报错)时才回滚 } finally { sqlSession.close(); inputStream.close(); } } }
- 运行结果:
- 运行结果:
-
删除方法测试
//删除人员信息测试 public class deleteMain { @Test public void testSave() throws IOException { InputStream inputStream = Resources.getResourceAsStream("mybatis-config.xml"); SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream); SqlSession sqlSession = sqlSessionFactory.openSession(); try { IUserMapper mapper = sqlSession.getMapper(IUserMapper.class); int num = mapper.deleteById(8); //将数据提交到数据库中 sqlSession.commit();//全部正常执行后,提交事务 System.out.println("添加 "+num+" 条记录"); }catch (Exception e){ e.printStackTrace(); sqlSession.rollback();//抛异常(报错)时才回滚 }finally { sqlSession.close(); inputStream.close(); } } }
- 运行结果
- 运行结果
-
修改方法测试
//修改人员信息测试 public class updateMain { @Test public void testSave() throws IOException { InputStream inputStream = Resources.getResourceAsStream("mybatis-config.xml"); SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream); SqlSession sqlSession = sqlSessionFactory.openSession(); try { IUserMapper mapper = sqlSession.getMapper(IUserMapper.class); User user=new User(); user.setId(5); user.setName("sy"); user.setPwd("123456"); user.setAge("25"); int num = mapper.updateById(user); //将数据提交到数据库中 sqlSession.commit();//全部正常执行后,提交事务 System.out.println("添加 "+num+" 条记录"); }catch (Exception e){ e.printStackTrace(); sqlSession.rollback();//抛异常(报错)时才回滚 }finally { sqlSession.close(); inputStream.close(); } } }
- 运行结果
- 运行结果
-
-
查询方法测试
-
根据id查询
public class queryByIdMain { // 根据id查询 @Test public void test() throws IOException { /* 1. 读取全局配置文件. getResourceAsStream 使用的资源路径 */ InputStream inputStream = Resources.getResourceAsStream("mybatis-config.xml"); // 2. 使用sqlSession的工厂构造器来读入全局配置,再生成一个sqlSession工厂. SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream); // 3. 通过 sqlSession 工厂打开一个 sqlSession SqlSession sqlSession = sqlSessionFactory.openSession(); try { //4 使用SqlSession创建Dao接口的代理对象 IUserMapper mapper = sqlSession.getMapper(IUserMapper.class); List<User> list = mapper.queryById(2); for(User user:list){ String info= String.format("id:%s,用户名:%s,密码:%s",user.getId(),user.getName(),user.getPwd() ); System.out.println(info); } }finally{ sqlSession.close(); } } }
- 运行结果
- 运行结果
-
模糊查询
public class queryByIdMain { // 模糊查询 @Test public void test() throws IOException { InputStream inputStream = Resources.getResourceAsStream("mybatis-config.xml"); SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream); SqlSession sqlSession = sqlSessionFactory.openSession(); try { IUserMapper mapper = sqlSession.getMapper(IUserMapper.class); List<User> list = mapper.queryByName("李%"); for(User user:list){ String info= String.format( "id:%s,用户名:%s,密码:%s,年龄:%s,性别:%s,用户信息:%s", user.getId(),user.getName(),user.getPwd(),user.getAge(),user.getSex(),user.getStatus()); System.out.println(info); } }finally{ sqlSession.close(); } } }
- 运行结果
- 运行结果
-
查询全部
public class queryByIdMain { // 查询全部数据 @Test public void test() throws IOException { InputStream inputStream = Resources.getResourceAsStream("mybatis-config.xml"); SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream); SqlSession sqlSession = sqlSessionFactory.openSession(); try { IUserMapper mapper = sqlSession.getMapper(IUserMapper.class); List<User> list = mapper.query(); for(User user:list){ String info= String.format("id:%s,用户名:%s,密码:%s",user.getId(),user.getName(),user.getPwd() ); System.out.println(info); } }finally{ sqlSession.close(); } } }
- 运行结果
- 运行结果
-
查询总人数
public class queryByIdMain { // 查询总人数 @Test public void test() throws IOException { InputStream inputStream = Resources.getResourceAsStream("mybatis-config.xml"); SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream); SqlSession sqlSession = sqlSessionFactory.openSession(); try { IUserMapper mapper = sqlSession.getMapper(IUserMapper.class); int i = mapper.queryCount(); System.out.println(i); }finally{ sqlSession.close(); } } // 查询全部数据 @Test public void test() throws IOException { InputStream inputStream = Resources.getResourceAsStream("mybatis-config.xml"); SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream); SqlSession sqlSession = sqlSessionFactory.openSession(); try { IUserMapper mapper = sqlSession.getMapper(IUserMapper.class); List<User> list = mapper.query(); for(User user:list){ String info= String.format("id:%s,用户名:%s,密码:%s",user.getId(),user.getName(),user.getPwd() ); System.out.println(info); } }finally{ sqlSession.close(); } } }
- 运行结果
- 运行结果
-