二、第一个 MyBatis 程序(实现简单的增删改查)

一、练习第一个 MyBatis 程序


1、创建 MyBatis 项目的步骤

  • 第一步:创建一个普通的 maven工程( IDEA)
    • maven 工程 目录结构
      在这里插入图片描述
    • Java 层级下主要用来存放Java代码
      • dto 存放实体类
      • mapper 存放 mapper 接口
    • resources 层级下主要用来存放配置文件
    • pom.xml 文件用来存放工程所需要的依赖


  • 第二步:打开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">
    	            <!-- 配置事务管理器类型,JDBCJdbcTransactionFactory.class 的别名 -->
    	            <transactionManager type="JDBC"></transactionManager>
    	            <!-- 配置数据源。POOLEDPooledDataSourceFactory.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();
      			        }
      			    }
      
      			}
      
      • 运行结果
        在这里插入图片描述
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值