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>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
原文地址:https://www.cnblogs.com/lhl-shubiao/p/6685974.html