zoukankan      html  css  js  c++  java
  • Mybatis基础-完整CRUD操作

    步骤一:mybatis基本配置

    1)创建Java项目,在lib下导入mybatis所需要的Jar包,包括链接mysql的mysql-connector-java-5.1.7-bin.jar。

    2)在src目录下新建一个mybatis的配置文件

    mybatis_conf.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>
        <properties resource="db.properties"></properties>
    
        <!-- 启用别名 -->
        <typeAliases>
            <package name="com.feng.domain" />
        </typeAliases>
        <environments default="development">
            <environment id="development">
                <transactionManager type="JDBC" />
                <dataSource type="POOLED">
                    <property name="driver" value="${jdbc.driverClass}" />
                    <property name="url" value="${jdbc.jdbcUrl}" />
                    <property name="username" value="${jdbc.user}" />
                    <property name="password" value="${jdbc.password}" />
                </dataSource>
            </environment>
        </environments>
        <!-- 配置 自动扫描 包下的 sql映射文件-->
        <mappers>
            <package name="com.feng.dao" />
        </mappers>
    </configuration>

     db.properties

    jdbc.user = root
    jdbc.password=123456
    jdbc.driverClass=com.mysql.jdbc.Driver
    jdbc.jdbcUrl=jdbc:mysql://127.0.0.1:3306/mybatis0814?useUnicode=true&characterEncoding=utf-8

    步骤二:

    1)新建表t_user,因为Mybatis不会自动创建数据表,和hibernate不一样,只专注sql

    2)定义表的实体类,必须一一对应,否则需要在映射里面设置resultMap结果集映射

    User

    package com.feng.domain;
    
    import java.util.Date;
    
    public class User
    {
        // 和表中的字段一一对应,否则需要在对应的Mapper配置文件用到resultMap结果集映射。
        private Integer id;
        private String username;
        private int age;
        private Date registerDate;
        
        public User(){}
    
        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 int getAge() {
            return age;
        }
    
        public void setAge(int age) {
            this.age = age;
        }
    
        public Date getRegisterDate() {
            return registerDate;
        }
    
        public void setRegisterDate(Date registerDate) {
            this.registerDate = registerDate;
        }
    
        @Override
        public String toString() {
            return "User [id=" + id + ", username=" + username + ", age=" + age
                    + ", registerDate=" + registerDate + "]";
        }
    

     3)在dao的包下,新建sql映射配置xml

    UserMapper.xml   必须和实体类对应  格式:实体类+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,取包名+映射文件 -->
    <mapper namespace="com.feng.dao.UserMapper">
    <!-- 对应的id为映射接口的方法 ,parameterType 设置为入参的类型,因为我在配置文件中启用了别名,自动扫描domain包,所以不需要写包名,如果没有就是com.feng.domain.User
        resultType就是返回的结果集类型,如果是基本类型,mybaits已经封装好了,直接写类型就好;如果是实体类,就要写上实体类的类型,也是可以别名的。
        useGeneratedKeys="true" keyProperty="id"   :启用这段后,可以得到新增的数据的主键id
        #{}里面新增的实体属性值,用#{},也可以用${value};推荐用#{},因为会自动使用parperstatement,防止sql注入
    -->
        <insert id="addUser" parameterType="User"  useGeneratedKeys="true" keyProperty="id">
            insert into t_user(username,age,registerDate)
            values(#{username},#{age},#{registerDate})
        </insert>
        <delete id = "deleteUser" parameterType="Integer"  >
            delete from t_user where id = #{id}
        </delete>
        <update id = "updateUser" parameterType="User" >
            update t_user 
            set 
                username = #{username},age=#{age},registerDate=#{registerDate}
            where 
                 id = #{id}
        </update>
        <!-- 多个数据 和 单个 数据 ,他们的类型都是一样,都是User -->
        <select id = "getUserById" parameterType="Integer" resultType = "User">
            select * from t_user where id = #{id}
        </select>
        <select id = "getAllUser" resultType="User">
            select * from t_user
        </select>
        <select id = "getAllUser1" parameterType="map" resultType="User">
            select * from t_user where age > #{age} and username = #{username}
        </select>
    </mapper>

    这里注意一点,update、delete 返回值是:更新或删除的行数;无需指明resultClass;但如果有约束异常而删除失败,只能去捕捉异常。 

    insert,返回值是:新插入行的主键(primary key);需要包含<selectKey>语句,才会返回主键,否则返回值为null。

    4)操作接口

    UserMapper.java

    package com.feng.dao;
    
    
    
    import java.util.List;
    import java.util.Map;
    
    import com.feng.domain.User;
    
    public interface UserMapper 
    {
        //增加一个用户
        public void addUser(User user);
        
        //删除一个用户
        public void deleteUser(Integer id);
        
        //修改用户信息
        public void updateUser(User user);
        
        //得到一个用户
        public User getUserById(Integer id);
        
        //得到所有用户
        public List<User> getAllUser();
        
        // 多入参情况下用map
        public List<User> getAllUser1(Map<String, Object> map);
    
    }

    步骤三

    1)新建测试类Test_Crud.java

    package com.feng.test;
    
    import java.io.IOException;
    import java.io.InputStream;
    import java.util.Date;
    import java.util.HashMap;
    
    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.Before;
    import org.junit.Test;
    
    import com.feng.domain.User;
    
    public class Test_Crud {
    
        private SqlSessionFactory sqlSessionFactory = null;
    
        @Before
        public void init() throws IOException {
            // 使用MyBatis提供的Resources类加载mybatis的配置文件(它也加载关联的映射文件)
            InputStream inputStream = Resources
                    .getResourceAsStream("mybatis_conf.xml");
            // 创建SqlSessionFactory工厂
            sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        }
    
        @Test
        public void addUser() {
            // 创建并且打开sqlsession
            SqlSession sqlSession = null;
            try {
    
                sqlSession = sqlSessionFactory.openSession();
                User user = new User();
                user.setAge(22);
                user.setRegisterDate(new Date());
                user.setUsername("feng");
                sqlSession.insert("com.feng.dao.UserMapper.addUser", user);
                sqlSession.commit();
                System.out.println(user.getId());
    
            } catch (Exception e) {
                e.printStackTrace();
            } finally {
                if (sqlSession != null) {
                    sqlSession.close();
                }
            }
        }
    
        @Test
        public void deleteUser() {
            // 创建并且打开sqlsession
            SqlSession sqlSession = null;
            try {
    
                sqlSession = sqlSessionFactory.openSession();
                sqlSession.delete("com.feng.dao.UserMapper.deleteUser", 2);
                sqlSession.commit();
    
            } catch (Exception e) {
                e.printStackTrace();
            } finally {
                if (sqlSession != null) {
                    sqlSession.close();
                }
            }
        }
    
        @Test
        public void updateUser() {
            // 创建并且打开sqlsession
            SqlSession sqlSession = null;
            try {
    
                sqlSession = sqlSessionFactory.openSession();
                User user = new User();
                user.setAge(22);
                user.setId(1);
                user.setRegisterDate(new Date());
                user.setUsername("wei");
                sqlSession.update("com.feng.dao.UserMapper.updateUser", user);
                sqlSession.commit();
            } catch (Exception e) {
                e.printStackTrace();
            } finally {
                if (sqlSession != null) {
                    sqlSession.close();
                }
            }
        }
    
        @Test
        public void getUserById() {
            // 创建并且打开sqlsession
            SqlSession sqlSession = null;
            try {
                sqlSession = sqlSessionFactory.openSession();
    
                User user = sqlSession.selectOne(
                        "com.feng.dao.UserMapper.getUserById", 1);
                System.out.println(user.toString());
                sqlSession.commit();
            } catch (Exception e) {
                e.printStackTrace();
            } finally {
                if (sqlSession != null) {
                    sqlSession.close();
                }
            }
        }
    
        @Test
        public void getAllUser() {
            // 创建并且打开sqlsession
            SqlSession sqlSession = null;
            try {
                sqlSession = sqlSessionFactory.openSession();
    
                java.util.List<User> list = sqlSession
                        .selectList("com.feng.dao.UserMapper.getAllUser");
                for (User user : list) {
                    System.out.println(user.toString());
                }
                sqlSession.commit();
            } catch (Exception e) {
                e.printStackTrace();
            } finally {
                if (sqlSession != null) {
                    sqlSession.close();
                }
            }
        }
    
        @Test
        // 多入参情况下,用map
        public void getAllUser1() {
            // 创建并且打开sqlsession
            SqlSession sqlSession = null;
            try {
                sqlSession = sqlSessionFactory.openSession();
                HashMap<String, Object> map = new HashMap<String, Object>();
                map.put("age", 20);
                map.put("username", "feng");
    
                java.util.List<User> list = sqlSession.selectList(
                        "com.feng.dao.UserMapper.getAllUser1", map);
                for (User user : list) {
                    System.out.println(user.toString());
                }
                sqlSession.commit();
            } catch (Exception e) {
                e.printStackTrace();
            } finally {
                if (sqlSession != null) {
                    sqlSession.close();
                }
            }
        }
    
    }

    最后的结构图如下

  • 相关阅读:
    Java对象的生命周期与作用域的讨论(转)
    [置顶] Oracle学习路线与方法
    Java实现 蓝桥杯 算法训练 未名湖边的烦恼
    Java实现 蓝桥杯 算法训练 未名湖边的烦恼
    Java实现 蓝桥杯 算法训练 未名湖边的烦恼
    Java实现 蓝桥杯 算法训练 最大的算式
    Java实现 蓝桥杯 算法训练 最大的算式
    Java实现 蓝桥杯 算法训练 最大的算式
    Java实现 蓝桥杯 算法训练 最大的算式
    Java实现 蓝桥杯 算法训练 最大的算式
  • 原文地址:https://www.cnblogs.com/jinghuyue/p/9487377.html
Copyright © 2011-2022 走看看