一、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();
······
}