Mybatis总结

Mybatis总结_第1张图片

一、Mybatis主配置文件

1、连接数据库:



        

            

            
                
                
                
                
            
        
    

2、设置映射关系(以下三种方式都可以)

 
        
 


 
        
 


 
        
 

3、配置别名

 
        
        
    

二、dao(mapper)xml层

1、实体属性和数据库字段不统一的情况,使用resultMap


    

        

        
        
        
        

    

 

一致的情况下使用resultType

 

2、标签以及sql语句




        

        
            select  last_insert_id();
        

        insert into user(username,address,sex,birthday)values(#{username},#{address},#{sex},#{birthday});

 





     update user set username=#{username},address=#{address}, sex= #{sex}, birthday=#{birthday} where id = #{id}

    







        delete from user where id=#{id}

三、接口层

1、简单的注解

    /**
     * 删除用户
     */

    @Delete("delete from user where id = #{id}")
    void deleteUser(Integer userid);

2、使用Result(当数据库名字和实体名字对应不上的时候)

  /**
     * 查询所有用户
     *
     * @return
     */
    @Select("select * from user")

    @Results(id="userMap",value={
            @Result(id=true,column = "id",property = "id"),
            @Result(column = "username",property = "username"),
            @Result(column = "address",property = "address"),
            @Result(column = "birthday",property = "birthday")

    })
    List findAll();

    /**
     * 根据Id进行查询
     * @param userId
     * @return
     */
    @Select("select * from user where id = #{id}")
    @ResultMap(value={"userMap"})
    User findById(Integer userId);

3、一对一的对应关系查询

①一个实体里面声明另一个实体

public class Account implements Serializable {
    private Integer id;
    private Integer uid;
    private Double money;
    // 一个账户只能属于一个用户
    private  User user;

//get and set
}

one代表的是一对一的对应关系

eager立即加载,一对一使用这个,多对多使用lazy

public interface IAccountDao {
    /**
     * 查询所有账户,并且获取每个账户所属的用户信息
     */

    @Select("select * from account")

    @Results(id ="accountMap", value={
            @Result(id=true ,column = "id",property = "id"),
            @Result(column = "uid",property = "uid"),
            @Result(column = "money",property = "money"),
            @Result(property = "user",column = "uid",one=@One(select = "com.itheima.dao.IUserDao.findById",fetchType= FetchType.EAGER))
    })
    List findAll();

}

三、客户端

关掉一级缓存的两种方式

public class MybatisTest {
    private InputStream in;
    private SqlSessionFactory factory;
    private SqlSession sqlSession;
    private IUserDao userDao;
 
    //此注解用于在测试方法之前执行
    @Before
    public void init() throws  Exception{
        //读取配置文件,生成字节输入流
        in = Resources.getResourceAsStream("SqlMapConfig.xml");
        //获取sqlsessionfactory
        factory = new SqlSessionFactoryBuilder().build(in);
        //获取sqlsession 对象
        sqlSession = factory.openSession();
        //获取dao的代理对象
        userDao = sqlSession.getMapper(IUserDao.class);
    }
 
    //此注解用于在测试方法之后执行
    @After
    public void destory() throws  Exception{
        //释放资源
        sqlSession.close();
        in.close();
    }

    public void test(){
    User user1=userDao.findById(41);
    ······

    //sqlSession.close();
    //sqlSession=factory.openSession();

    sqlSession.clearCache();
    ······

}

 

 

 

你可能感兴趣的:(Mybatis)