zoukankan      html  css  js  c++  java
  • Mybatis

    mybatis:注意点
     
    1:关联查询的时候在被动方必须写别名,
    2:limit 分页必须¥{} 美元符号
    3:在bean里面必须描述关联关系,说白了就是在一方bean里面写list<Obj>   或者在多方bean中写Obj   obj属性并生成setter,getter方法
    4:通过Bean的setter  getter 方法设值值或者取值,必须注意:必须要和数据库字段保持一致,否则就必须写写别名或者在property中映射
          <id column="t_id" property= "teaId"/>
         <result column ="t_name" property="teaName"/>
    ===============================================================================================
    <select id= "findStudents" resultType ="Student" >
               select
         stu_id  as stuId,
         stu_name as stuName,
         stu_class as stuClass
         from student
     
    </select>
    一、返回值类型:1、返回Bean的情况下 如果数据库表的字段于bean对象属性不一致的时候必须 设置两者保持一致
                        2、返回java.util.Map之类的东西时,只要却包数据库字段正确就OK
    二、
     <!-- 别名映射的另外一种配置 -->
      < typeAliases>
         <package name ="com.shubiao.mybatis.bean"/> <!-- 这样配置他的默认别名就是:类名 -->
      </ typeAliases>
    凡是用到用到比如:com.shubiao.mybatis.bean.User 的时候都用类名代替
    三、
       <!-- 事物类型 -->
          <transactionManager type ="MANAGED"/> <!-- MANAGED/JDBC:注如果使用MANAGED,则无需关心事物提交和关闭的情况
                                                               如果使用JDBC的话需要手动提交事物,和关闭连接,否则它会一直被占用 -->
     
    四、
     <!-- sql配置文件的解析和注入 -->
     < mappers>
         <mapper resource= "com/shubiao/mybatis/dao/UserMapper.xml" />
         <mapper resource= "com/shubiao/mybatis/dao/StudentCourseMapper.xml" />
         <mapper resource= "com/shubiao/mybatis/dao/StudentTeacherMapper.xml" />
     </ mappers>        
    五、
    <select id= "findUser2" resultType ="User" parameterType="User">
         select userId,userUsername,userPassword,user_email as userEmail from user where userId=#{userId}
    </select>
    <!-- 增,删,改 -->
    <!-- useGeneratedKeys="true"
         keyProperty="id"
         以上参数的作用:如果有需求需要返回id的时候,并且表里面也是自动增长的情况下,保存数据需要设置这两个属性 -->
    <insert id= "saveUser" parameterType ="User" useGeneratedKeys="true"
        keyProperty="id">
         insert into  user (
         userUsername,
         userPassword,
         userEmail)
         values(
         #{userUsername},
         #{userPassword},<!-- 由于此处是用User对象的get方法得到的数据,所以名称一定要与对象属性保持严格一致 -->
         #{userEmail})
    </insert>
    六、在不想影响Bean的情况下可以建一个Params参数类来解决参数注入的问题
    <!-- 模糊查询加排序 ,返回User-->
    <select id= "findUser" parameterType ="Params" resultType= "User"><!-- 下面的模糊查询条件和排序都必须使用美元符号,切记:使用#就是? 号,使用$就是替换 -->
         select userId,userUsername,userPassword,user_email as userEmail from user where userUsername like '%${userUsername}%'
         and userPassword=#{userPassword}  order by ${userId}
     
    </select>
    <!-- 模糊查询加排序,返回Map -->
    <select id= "findUserMap" parameterType ="Params" resultType= "java.util.Map"><!-- 下面的模糊查询条件和排序都必须使用美元符号,切记:使用#就是? 号,使用$就是替换 -->
         select userId,userUsername,userPassword,user_email as userEmail from user where userUsername like '%${userUsername}%'
         and userPassword=#{userPassword}  order by ${userId}
    </select>
     
    <!-- count求总数 -->
    <select id= "findCount" resultType ="int">
         select count(0) from user; <!-- 此处可以写第几个参数,可以写表中的某个字段:推荐使用唯一字段 -->
    </select>
     
    第一步: 导入数据库的驱动包和
    mybatis-3.3.0-SNAPSHOT.jar
    mybatis-spring-1.2.1.jar
    第二步:
    <?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="com/config/db/db.properties"></properties>     -->
      <!-- 资源文件的引入 -->
      <properties resource="db.properties"></properties>
      <!-- 这是 MyBatis 中极为重要的调整设置,它们会改变 MyBatis 的运行时行为。下表描述了设置中各项的意图、默认值等。 -->
      <settings>
           <setting name="defaultExecutorType" value="SIMPLE" />   
      </settings>
      <!-- 别名的映射 -->
      <typeAliases>
          <!--<typeAlias type="com.tz.bean.User" alias="User"/> -->
          <package name="com.tz.bean"/><!-- 那么它的默认别名:就是类名 -->
      </typeAliases>   
      <environments default="development">
        <environment id="development">
          <!-- 事务类型 增,删,改-->
          <transactionManager type="MANAGED">
                <property name="closeConnection" value="false"/>
          </transactionManager>
          <!-- 数据源  POOLED,它是一个线程池(放入全部都是连接对象),监听连接的获取,关闭-->
          <dataSource type="POOLED">
            <property name="driver" value="${db.driver}"/>
            <property name="url" value="${db.url}"/>
            <property name="username" value="${db.username}"/>
            <property name="password" value="${db.password}"/>
          </dataSource>
        </environment>
      </environments>
      <!-- sql配置文件的解析和注入,放入sqlsessionFactory,就 放入map,就放入内存中 -->
      <mappers>
          <mapper resource="com/tz/dao/UserMapper.xml"/>
      </mappers>
    </configuration>
     
    第三步:
    /**
     * tzdesk系统平台
     * mybatis
     * com.tz.bean
     * User.java
     * 创建人:xuchengfei
     * 时间:2015年11月18日-下午10:13:38
     * 2015潭州教育公司-版权所有
     */
    package com.tz.bean;
     
    import java.util.Date;
     
    /**
     *
     * User 创建人:xuchengfei 时间:2015年11月18日-下午10:13:38
     *
     * @version 1.0.0
     *
     */
    public class User {
     
        /* 主键 */
        private Integer id;
        // 用户名
        private String username;
        // 密码
        private String password;
        // 账号
        private String account;
        // 手机
        private String telephone;
        // 身份证
        private String idcard;
        // 性别:0女1男
        private Integer male;
        // 生日
        private Date birthday;
        // 邮箱
        private String email;
        // 地址
        private String address;
        // 年龄
        private Integer age;
        // 创建时间
        private Date createTime;
        // 删除状态0未删除1删除
        private Integer isDelete;
        // 更新时间
        private Date updateTime;
        // 报名老师
        private Integer teacherId;
        // 学科ID
        private Integer subjectId;
        // 状态 0未发布1发布
        private Integer status;
        // 1老师2学生
        private Integer type;
     
        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 String getPassword() {
            return password;
        }
     
        public void setPassword(String password) {
            this.password = password;
        }
     
        public String getAccount() {
            return account;
        }
     
        public void setAccount(String account) {
            this.account = account;
        }
     
        public String getTelephone() {
            return telephone;
        }
     
        public void setTelephone(String telephone) {
            this.telephone = telephone;
        }
     
        public String getIdcard() {
            return idcard;
        }
     
        public void setIdcard(String idcard) {
            this.idcard = idcard;
        }
     
        public Integer getMale() {
            return male;
        }
     
        public void setMale(Integer male) {
            this.male = male;
        }
     
        public Date getBirthday() {
            return birthday;
        }
     
        public void setBirthday(Date birthday) {
            this.birthday = birthday;
        }
     
        public String getEmail() {
            return email;
        }
     
        public void setEmail(String email) {
            this.email = email;
        }
     
        public String getAddress() {
            return address;
        }
     
        public void setAddress(String address) {
            this.address = address;
        }
     
        public Integer getAge() {
            return age;
        }
     
        public void setAge(Integer age) {
            this.age = age;
        }
     
        public Date getCreateTime() {
            return createTime;
        }
     
        public void setCreateTime(Date createTime) {
            this.createTime = createTime;
        }
     
        public Integer getIsDelete() {
            return isDelete;
        }
     
        public void setIsDelete(Integer isDelete) {
            this.isDelete = isDelete;
        }
     
        public Date getUpdateTime() {
            return updateTime;
        }
     
        public void setUpdateTime(Date updateTime) {
            this.updateTime = updateTime;
        }
     
        public Integer getTeacherId() {
            return teacherId;
        }
     
        public void setTeacherId(Integer teacherId) {
            this.teacherId = teacherId;
        }
     
        public Integer getSubjectId() {
            return subjectId;
        }
     
        public void setSubjectId(Integer subjectId) {
            this.subjectId = subjectId;
        }
     
        public Integer getStatus() {
            return status;
        }
     
        public void setStatus(Integer status) {
            this.status = status;
        }
     
        public Integer getType() {
            return type;
        }
     
        public void setType(Integer type) {
            this.type = type;
        }
    }
    第四步:建立一个bean对应的sql配置文件 UserMapper.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">
    <mapper namespace="com.tz.bean.userMapper"> 
        <!--  所有的增,删,查,改都在这里进行定义  -->
        <select id="findUsers" resultType="User">
            SELECT id,username,password FROM tz_user
        </select>
     
        <!-- 增,删,改  int-->
        <insert id="saveUser" useGeneratedKeys="true" keyProperty="id" parameterType="User">
            INSERT tz_user(
                username,
                password,
                account,
                telephone,
                idcard,
                is_delete,
                male,
                birthday,
                email,
                address,
                teacher_id,
                subject_id,
                age,
                status,
                type
            )VALUES(
                #{username},
                #{password},
                #{account},
                #{telephone},
                #{idcard},
                #{isDelete},
                #{male},
                #{birthday},
                #{email},
                #{address},
                #{teacherId},
                #{subjectId},
                #{age},
                #{status},
                #{type}
            )
        </insert>
     
        <!-- 更新 -->
        <update id="updateUser" parameterType="User">
            UPDATE tz_user SET username = #{username} WHERE id = #{id}
        </update>
     
        <!-- 删除 -->
    <!--     <delete id="deleteUser" parameterType="int"> -->
    <!--         delete from tz_user where id = #{0} -->
    <!--     </delete> -->
     
         <delete id="deleteUser" parameterType="User">
             delete from tz_user where id = #{id}
        </delete>
     
        <delete id="deleteUser2" parameterType="java.util.Map">
             delete from tz_user where username=#{username} and account=#{account}
        </delete>
    </mapper>
     
    第五步:定义测试类:
    /**
     * tzdesk系统平台
     * mybatis
     * com.test.mybatis
     * TestMyatisSessionFactory.java
     * 创建人:xuchengfei
     * 时间:2015年11月18日-下午10:02:51
     * 2015潭州教育公司-版权所有
     */
    package com.test.mybatis;
     
    import java.io.IOException;
    import java.io.InputStream;
    import java.util.Date;
    import java.util.HashMap;
    import java.util.List;
    import java.util.Map;
     
    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.tz.bean.User;
     
    /**
     *
     * TestMyatisSessionFactory
     * 创建人:xuchengfei
     * 时间:2015年11月18日-下午10:02:51
     * @version 1.0.0
     *
     */
    public class TestMyatisSessionFactory {
     
        private  SqlSessionFactory sessionFactory;
     
        @Before
        public void before() throws IOException{
            String resource = "mybatis-config.xml";
            InputStream inputStream = Resources.getResourceAsStream(resource);
            sessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        }
     
        @Test
        public  void handler() throws IOException{
            SqlSession session = sessionFactory.openSession();
            List<User> users = session.selectList("com.tz.bean.userMapper.findUsers");
            for (User user : users) {
                System.out.println("==============="+user.getUsername());
            }
        }
     
        @Test
        public void saveUser(){
            SqlSession session = sessionFactory.openSession();
            User user = new User();
            user.setUsername("keke");
            user.setPassword("111111");
            user.setAccount("keke");
            user.setTelephone("23423423423423");
            user.setIdcard("324565543");
            user.setIsDelete(0);
            user.setMale(1);
            user.setBirthday(new Date());
            user.setEmail("2346546@qq.com");
            user.setAddress("是打发是打发大");
            user.setTeacherId(1);
            user.setSubjectId(1);
            user.setAge(30);
            user.setStatus(1);
            user.setType(2);
            int count  =session.insert("com.tz.bean.userMapper.saveUser", user);
            System.out.println(count>0?"保存成功":"保存失败");
            //session.close();
        }
     
        @Test
        public void updateUser(){
            SqlSession session = sessionFactory.openSession();
            User user = new User();
            user.setId(1);
            user.setUsername("柯柯");
            int count  =session.insert("com.tz.bean.userMapper.updateUser", user);
            System.out.println(count>0?"更新成功":"更新失败");
            //session.close();
        }
     
     
        @Test
        public void deleteUser(){
            SqlSession session = sessionFactory.openSession();
    //        int count  =session.delete("com.tz.bean.userMapper.deleteUser", 13);
    //        System.out.println(count>0?"删除成功":"删除失败");
    //        User user = new User();
    //        user.setId(14);
    //        int count  =session.delete("com.tz.bean.userMapper.deleteUser", user);
    //        System.out.println(count>0?"删除成功":"删除失败");
            //session.close();
     
            Map<String, Object> map = new HashMap<String, Object>();
            map.put("username","keke");
            map.put("account", "keke");
            int count  = session.delete("com.tz.bean.userMapper.deleteUser2", map);
            System.out.println(count>0?"删除成功":"删除失败");
        }
     
    }
     
    注意点:
    mybatis它是一个半面向对象orm框架,让我们重新回归sql最本真的写法。通过一个配置文件。去定义数据的连接的
    相关信息,比如事件,插件,配置装载,事务的自动提交,缓存,数据类型处理等。通过解析配置装载到SqlsessionFactory
    进行初始化,然后通过sqlsessionFactory获取会话对象SqlSession,获取连接对象,通过sqlSession中定义的api方法
    和Mapper对象进行关联处理数据中增,删,查,改。比如
    //查询单个实体
    T session.selectOne(String mapperKey)
    T session.selectOne(String mapperKey,Object params)
    //查询返回多个实体
    List<T> selectList(String mapperKey)
    List<T> selectList(String mapperKey,Object params)
    //保存方法
    int insert(String mapperKey)
    int insert(String mapperKey,Object params)
    //修改方法
    int update(String mapperKey)
    int update(String mapperKey,Object params)
    //删除方法
    int delete(String mapperKey)
    int delete(String mapperKey,Object params)
    //返回map
    Map<T,K> selectMap(String mapperKey)
    Map<T,K> selectMap(String mapperKey,Object params)
     
    mapperKey=是sql配置文件的命名空间+id
    通过以后一些可以实现实现增删查改操作。如果你配置事务管理器是JDBC的话,在打开连接的时候,比如收到设置自动事务提交,sessionFactory.openSession(true),如果
    你设置的是 MANAGED,自动事务提交.
     <!-- 事务类型 增,删,改-->
      <transactionManager type="MANAGED">
            <property name="closeConnection" value="false"/>
      </transactionManager>
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
  • 相关阅读:
    HDU5618 Jam's problem again
    BZOJ2002弹飞绵羊
    树剖模板
    点分治模板题
    c++ 读入优化、输出优化模板
    牛客网练习赛44-B(快速幂+模拟)
    poj2912(带权并查集+枚举)
    ucore-lab1-练习3report
    poj2492(带权并查集)
    poj1984(带权并查集)
  • 原文地址:https://www.cnblogs.com/lhl-shubiao/p/6685974.html
Copyright © 2011-2022 走看看