使用Mybatis完成CRUD
使用Mybatis完成CRUD
下面总结Mybatis简单的实现增删改查,并且在学习中发现,总结的一些问题。
准备数据库
准备一个User的表
生产的语句如下:
DROP TABLE IF EXISTS `user`;
CREATE TABLE `user` (
`id` int(11) NOT NULL auto_increment,
`username` varchar(32) NOT NULL COMMENT '用户名称',
`birthday` datetime default NULL COMMENT '生日',
`sex` char(1) default NULL COMMENT '性别',
`address` varchar(256) default NULL COMMENT '地址',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
搭建Mybatis的运行环境
- 创建项目
首先新建一个项目,其中左边的一栏要选择Maven,然后一直下一步就可以完成创建。注意此处有一个GroupID 和ArtifactID,GroupID表示当前项目属于哪个组,例:com.mycom.myapp. ArtifactID表示当前项目在组中的唯一表示 例:myapp-util
- 引入驱动
创建完成后在pom.xml文件中引入驱动如下:
-
配置文件
先复制一个log4j.properties的文件到resources的文件夹中。然后在java中创建User类,创建和数据库字段相同的变量,并生成相应的get set和toString。注意:此处的User类里面的变量需要和数据库里面的变量一直,否则就需要在之后的映射文件中添加resultMap映射。
在resources中创建SqlMapConfig.xml文件。这个文件的主要作用就是配置连接数据库需要的driver url username password 以及映射文件的位置。如图:
这里需要注意的是:url的value值后面需要在写完数据库地址后需要加上?userUnicode=true&characterEncoding=utf8否则之后更新到数据库里面的数据可能会是问号。配置好了之后在resources在创建一个IUserDao.xml的映射文件,用于记录sql语句和执行方法的对应关系。如图:
最后再JAVA里面在创建一个IUserDao的接口用来写各种执行方法的名称。
创建测试文件
在环境创建好了以后,在test-java中创建一个MybatisTest的一个测试文件。在这个类中,先定义:
private InputStream in;
private SqlSession sqlSession;
IUserDao userDao;
@Before //执行前先运行
public void init() throws IOException{
//1.读取配置文件,生成字节输入流
in = Resources.getResourceAsStream(“SqlMapConfig.xml”);
//2.获取sqlsession对象
sqlSession = new SqlSessionFactoryBuilder().build(in).openSession();
//3.获取dao的代理对象
userDao = sqlSession.getMapper(IUserDao.class);
}
@After
public void destroy () throws IOException {
// 提交事务
sqlSession.commit();
in.close();
sqlSession.close();
}
实现查询功能
在配置好环境以后,开始实现功能。在IUserDao接口中写下查询的方法名称。
// 查询所有的用户
List findAll();
然后在IUserDao.xml中写下映射关系:
<mapper namespace="com.itheima.dao.IUserDao">
<select id="findAll" resultType="com.itheima.domain.User">
select * from user;
</select>
</mapper >
注意此处的namespace + id 组成可以精确查找到接口中的方法
resultType表示返回的类型,parameterType表示参数类型。另外还有resultMap和parameterMap用于User类的变量名称和数据库名称不一样的时候,需要指定对应关系,对应关系如图:
之后在MybatisTest的测试文件中,加入执行语句:
//查询所有
@Test
public void testFindAll() throws IOException {
//执行查询所有的方法
List<User> users = userDao.findAll();
for (User user : users) {
System.out.println(user);
}
}
然后右键执行。
实现插入功能
接下来实现插入功能,同理现在IUserDao接口中添加添加方法
//插入
void Insert(User user);
然后在IUserDao.xml中添加映射关系:
<insert id="Insert" parameterType="com.itheima.domain.User">
INSERT INTO user (username, address, sex, birthday) VALUE (#{username}, #{address}, #{sex}, #{birthday});
</insert>
此处注意:后面的例如#{address}需要和User里面的变量一致。并且注意格式
最后在MybatisTest的测试文件中,加入执行语句:
//插入
@Test
public void testInsert(){
System.out.println(new Date());
User user = new User();
user.setAddress("绵阳");
user.setBirthday(new Date());
user.setSex("女");
user.setUsername("测试姓名1");
userDao.Insert(user);
}
注意:此处是传的参数是一个user类,先定义好然后在传入。
其他的更新和删除和以上大同小异。需要注意的是模糊查询的时候建议传入例如:%王% 使用这样的方法。