mybatis
mybatis调用的方法
//1,读取配置文件
InputStream in = Resources.getResourceAsStream("SqlMapConfig.xml");
//2,创建sqlSessionFactory工厂
SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
SqlSessionFactory factory = builder.build(in);
//3,是用工厂生产sqlSession对象
SqlSession session = factory.openSession();
//4,使用sqlSession创建接口的代理对象
IUserDao userDao = session.getMapper(IUserDao.class);
//5,使用代理对象执行方法
List users = userDao.findAll();
for (User user : users) {
System.out.println(user);
}
//6,释放资源
session.close();
in.close();
mybatis的主配置文件
SqlMapConfig.xml
配置properties
resource:用于指定配置文件的位置,是按照类路径的写法来写,并且必须存在于类路径下
resource="jdbcConfig.properties"
url:Uniform Resource Locator 统一资源定位符 可以唯一标识一个资源的位置
http://localhost:8080/mybatis/demo01Servlet
协议 主机 端口 URI(uri)
UR(uri)I:Uniform Resource Identifier 统一资源标识符 他是在某个应用中唯一定位资源的。
url="file:///D:/JavawebStudy/day02_01MybatisCRUD/src/main/resources/jdbcConfig.properties"
使用typeAliases配置别名 只能用于domain中类的别名
方法1
typeAliases用于配置别名 type属性指的是实体类全限定定类名 alias属性指的是别名 指定了别名就不用再区分大小写了
方法2
package该包下的实体类都会注册别名 并且类名就是别名 不在区分大小写
配置环境
配置mysql的环境
配置事务的类型
配置数据源(连接池)
配置连接数据库的4个基本信息
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/com_mybatis
jdbc.username=root
jdbc.password=123456
指定映射配置文件的位置,映射配置文件指的是每个dao独立的配置文件
方法1
方法2
package 标签是用于指定dao接口所在的包,当指定了就不需要再写resource或者class了
映射配置文件 基于xml的
映射配置文件必须和dao层对应的到的包路径相同
com.itheima.dao.UserDao
com.itheima.dao.IUserDAo.xml
namespace:指定dao
1,配置查询所有
id : 查询方法,resultType:返回值类型
2,保存用户
parameterType插入数据类型
select last_insert_id();
insert into user(username,address,sex,birthday) values(#{username},#{address},#{sex},#{birthday});
3,更新操作
update user set username=#{username},address=#{address},sex=#{sex},birthday=#{birthday} where id=#{id};
4,删除
delete from user where id = #{id};
5,通过id查询
6,通过name查询
select * from user where username like '%${value}%'
7,查询总记录数
8,根据QueryVo的条件来查询用户
9,动态的查询
1
2
Account 账户类
User 用户类
10,一对一的关系映射
在Account中设置User变量的对象 设置get和set方法 从表实体包含一个主表实体的引用
在IAccountDao.xml
定义封装account和user的resultMap
property: 原名字
column: 别名
查询所有账户和对应的用户
查询账户和对应的用户 并创建一个AccountUser只有姓名和地址
11,一对多关系映射
在User中设置Account变量的对象 设置get和set方法 主表实体应该包含从表实体集合引用
在IUserDao.xml
定义User的resultMap
配置查询User对象和所对应Account
User 用户类
Role 角色类
user_role用户角色类
12,多对多的关系映射,一个角色可以赋予多个用户
在Role类中,创建User变量的对象 设置get和set方法
查询角色对应的用户
13,多对多的映射关系,一个用户可以赋予多个角色
在User类中,创建Role变量的对象 设置get和set方法
查询用户对应的角色
14,延迟加载
在主配置文件中加入
1,一对一的关系映射,配置封装user的内容
select属性指定的,查询用户的唯一标识
column属性指定内容,用户根据id查询时,所需要参数的值
2,一对多的映射关系
15,二级缓存
在著配置文件中加入,二级缓存的配置文件
使用注解配置查询方法
主配置文件里要改
注解
@Select
public interface IUserDao {
/**
* 查询所有操作
* @return
*/
@Select("select * from user")
List findAll();
}
1,查询所有和所有人的账户信息
@Select("select * from user")
List findAll();
2,保存用户
@Insert("insert into user(username,address,sex,birthday) values(#{username},#{address},#{sex},#{birthday})")
void saveUser(User user);
3,更新用户
@Update("update user set username=#{username},address=#{address},sex=#{sex},birthday=#{birthday} where id=#{id}")
void update(User user);
4,删除操作
@Delete("delete from user where id = #{id};")
void delete(Integer id);
5,根据id查询用户
@Select("select * from user where id=#{id}")
User findById(Integer id);
6,通过名字查询
@Select("select * from user where username like #{name};")
List findUserByName(String username);
7,查询总记录数
@Select("select count(*) from user")
int findTotal();
8,查询所有用户,并且获取每个账户所属的用户信息
@Select("select * from account")
@Results(id = "accountMap",value = {
@Result(id = true,property = "id",column = "id"),
@Result(property = "uid",column = "uid"),
@Result(property = "money",column = "money"),
@Result(property = "user",column = "uid",one = @One(select="com.itheima.dao.IUserDao.findById",fetchType= FetchType.EAGER))
})
List findAll();
根据用户uid查询
@Select("select * from account where uid = #{userId}")
@ResultMap("accountMap")
List findByUid(Integer userId);
9,查询所有和所有人的账户信息
@Select("select * from user")
@Results(id = "userMap",value = {
@Result(id = true,property = "userId",column = "id"),
@Result(property = "userName",column ="username"),
@Result(property = "userAddress",column ="address"),
@Result(property = "userSex",column ="sex"),
@Result(property = "userBirthday",column ="birthday"),
@Result(property = "accounts",column = "id",
many = @Many(select = "com.itheima.dao.IAccountDao.findByUid", fetchType = FetchType.LAZY))
})
List findAll();
根据id查询用户
@Select("select * from user where id=#{id}")
@ResultMap("userMap")
User findById(Integer id);