• 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();
                }
            }
        }
    
    }

    最后的结构图如下

  • 相关阅读:
    密码由6-12位数字或字母组成,密码哈希加密
    获得一个字符串的汉语拼音码
    WPF中ComboBox绑定数据库自动读取产生数据
    SQL存储过程生成顺序编码
    SQL 语句调用这个存储过程,生成顺序编码
    restful(1):序列化
    Django的CBV和FBV
    权限管理组件:rbac
    ModelForm组件和forms组件补充
    BBS+Blog项目代码
  • 原文地址:https://www.cnblogs.com/jinghuyue/p/9487377.html
Copyright © 2020-2023  润新知