MyBatis学习笔记(二)
mybatis的curd(基于代理dao的方式)
1、实体类
public class User implements Serializable {
private Integer cid;
private Integer age;
private String username;
private String address;
private String sex;
private Date birthday;
public Integer getCid() {
return cid;
}
public void setCid(Integer cid) {
this.cid = cid;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public String getUsername() {
return username;
}
public void setUsername(String name) {
this.username = name;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public Date getBirthday() {
return birthday;
}
public void setBirthday(Date birthday) {
this.birthday = birthday;
}
@Override
public String toString() {
return "User{" +
"age=" + age +
", name='" + username + '\'' +
", address='" + address + '\'' +
", sex='" + sex + '\'' +
", birthday=" + birthday +
'}';
}
}
2、持久层接口
public interface IUserDao {
// 查询所有
List<User> findAll();
//保存用户
void saveUser(User user);
//更新用户
void updataUser(User user);
//删除用户
void deleteUser(int id);
//根据id找到用户
User findById(int id);
//模糊查询用户信息
List<User> findByName(String username);
////获取用户的总记录条数
int findTotal();
}
3、mybatis配置
<?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>
<!-- 配置环境 -->
<environments default="mysql">
<!-- 配置mysql的环境-->
<environment id="mysql">
<!-- 配置事务 -->
<transactionManager type="JDBC"></transactionManager>
<!-- 配置连接池 -->
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url"
value="jdbc:mysql://localhost:3306/fanyang_mybatis?characterEncoding=utf8"/>
<property name="username" value="root"/>
<property name="password" value="1234"/>
</dataSource>
</environment>
</environments>
<!-- 配置映射文件位置 -->
<mappers>
<mapper resource="dao/IUserDao.xml"></mapper>
</mappers>
</configuration>
4、mapper映射文件
public interface IUserDao {
// 查询所有
List<User> findAll();
//保存用户
void saveUser(User user);
//更新用户
void updataUser(User user);
//删除用户
void deleteUser(int id);
//根据id找到用户
User findById(int id);
//模糊查询用户信息
List<User> findByName(String username);
////获取用户的总记录条数
int findTotal();
}
5、测试类
public class mybatis {
private InputStream in;
private SqlSession sqlSession;
private IUserDao userDao;
@Before //用于在测试方法之前执行
public void init() throws Exception{
in = Resources.getResourceAsStream("SqlMapConfig.xml");
SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
SqlSessionFactory sqlSessionFactory = builder.build(in);
sqlSession = sqlSessionFactory.openSession();
userDao = sqlSession.getMapper(IUserDao.class);
}
@Test
public void testSave() throws Exception{
User user = new User();
user.setUsername("华晨宇");
user.setAge(30);
user.setSex("男");
user.setBirthday(new Date());
userDao.saveUser(user);
sqlSession.commit();
}
@Test
public void updateUser(){
User user = new User();
user.setCid(1);
user.setUsername("李晨2");
user.setAge(35);
user.setSex("女");
user.setBirthday(new Date());
userDao.updateUser(user);
sqlSession.commit();
}
@After //用于在测试方法之后执行
public void destoryIn() throws Exception{
sqlSession.close();
in.close();
}
}
mybatis中的参数深入及结果集深入
- parameterType
传递简单类型
传递pojo对象
Mybatis使用ognl表达式解析对象字段的值,#{}或者${}括号中的值为pojo属性名称ognl表达式:Object Graphic Navigation Language对象图导航语言,它是通过对象的取值方法来获取数据据,在写法上把get省略。mybatis在parameterType中已经提供了属性所属类。
传递pojo包装对象
2、returnType(输出类型)
简单类型
pojo对象
pojo列表
当数据库中列名与实体类的属性名不一致时,查询的结果都不能封装到查询的对象中,此时有两种方式
1、在sql语句中使用as
别名
2、在mapper配置文件中进行配置
<!-- 配置查询结果的列名和实体类的属性名的对应关系 -->
<resultMap id="userMap" type="daomain.User">
<!-- 主键字段的对应 -->
<id property="userId" column="id"></id>
<!--非主键字段的对应-->
<result property="userName" column="username"></result>
</resultMap>
mybatis中基于传统dao的方式
mybatis中的配置(主配置文件:SqlMapConfig.xml)
- properties标签
使用外部配置有两种:1、url 2、resource
<properties url="file:///G:/idea_workspace/Mybatis/yrq_02MybatisDao/src/main/resources/jdbcConfig.properties"></properties>
- typeAliases标签:使用别名
只能配置实体类中别名,type指定实体类全限定类名,不限定大小写 package标签:用于指定要使用别名的包,类名就是别名,不在区分大小写 - mappers标签
package标签:用于指定dao接口要使用别名的包,类名就是别名,不在区分大小写
待解决:Proxy(动态代理)