使用Mybatis的过程分为以下步骤:
一、导入jar或在pom中添加依赖
以MySQL数据库为例
需要添加如下依赖:
<!-- mybatis框架依赖-->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.4</version>
</dependency>
<!-- mysql数据库依赖-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.48</version>
</dependency>
二、创建Model类以及DAO类(数据库访问类)
字段名最好与数据库列名相同
例如:
package com.my.domain;
public class User {
String username;
String password;
String birthday;
int id;
String email;
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getBirthday() {
return birthday;
}
public void setBirthday(String birthday) {
this.birthday= birthday;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
@Override
public String toString() {
return "User{" +
"username='" + username + '\'' +
", password='" + password + '\'' +
", birthday='" + brithday + '\'' +
", id='" + id + '\'' +
", email='" + email + '\'' +
'}';
}
}
这里对应我数据库User表以及表中的列,封装get&set方法,重写tostring()方法用来方便看执行结果(有无均可)
=============================分割线===================================
DAO接口:
package com.my.dao;
import com.my.domain.User;
import java.util.List;
public interface IUserDao {
public List<User> findAll();
public int inseterUser(User user);
public User findUserById(String id);
public void updateUser(User user);
public void delUser(String id);
}
创建接口,并且定义好需要操作数据库执行的方法(Mybatis可以不写实体类,直接使用动态加载,所以只要写接口就好)
三、创建mybatis配置文件(SqlMapperConfig.xml)
<?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">
<!-以上皆为固定的XML约束头,直接复制即可-->
<configuration>
<environments default="mysql"><!--配置环境,并设置默认使用名为"mysql"的环境-->
<environment id="mysql"><!--为环境设置id-->
<transactionManager type="jdbc"></transactionManager><!--设置数据库事务类型为jdbc-->
<dataSource type="POOLED"><!--设置数据库连接池类型-->
<property name="driver" value="com.mysql.jdbc.Driver"/><!--驱动-->
<property name="url" value="jdbc:mysql:///mynote"/><!--地址-->
<property name="username" value="root"/><!--数据库用户名-->
<property name="password" value="root"/><!--数据库密码-->
</dataSource>
</environment>
</environments>
<mappers><!--声明映射文件-->
<mapper resource="com/my/dao/IUserMapper.xml"/><!--声明映射文件的路径需要与DAO接口路径一致-->
<!--可以添加多个映射mapper-->
</mappers>
</configuration>
四、创建映射文件IUserDaoMapper.xml(在上述mapper标签中有体现)
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<!--以上为固定XML文件约束直接复制-->
<mapper namespace="com.my.dao.IUserDao"><!--这里需要填写DAO接口的全限定类名,让Mybatis解析并最后产生映射-->
<select id="findAll" resultType="com.my.domain.User">
<!--标签名为要执行SQL语句的类型, id=DAO接口中对应的方法名 resultType=返回值类型,若返回值为Model类直接填写全限定类名即可,基本类型可以也可以填写-->
select * from user;
</select>
<insert id="inseterUser" parameterType="com.my.domain.User">
<!--parmeterTyper= 方法传入的参数类型,若是Model类也需要写全限定类名-->
insert into user(username,password,brithday,email) values (#{username},#{password},#{brithday},#{email})
</insert>
<update id="updateUser" parameterType="com.my.domain.User">
update user set username=#{username},password=#{password},brithday=#{brithday},email=#{email} where id=#{id}
</update>
<delete id="delUser" parameterType="String">
delete from user where id=#{id};
</delete>
<select id="findUserById" parameterType="string" resultType="com.my.domain.User">
select * from user where id=#{id}
</select>
</mapper>
看了映射文件会有一个疑问,就是#{xxx}是什么,其实这个是Mybatis配置中的占位符 #{username}代表从resultType属性的类中取username属性,底层调用了get方法,但是省略显示了。
如果你看到这里并且上面的都已经创建好了以后,下面最后一步就是测试了,不过测试中也会有很多要注意的,下面我可以创建一个测试类,这里我直接在Main方法中测试:
public static void main(String[] args) throws IOException {
//将配置文件加载到输入流,这里还可以用类加载器
InputStream in= Resources.getResourceAsStream("SqlMapperConfig.xml");
//使用SqlSessionFactoryBuilder 构建SqlSessionFactory工厂类
SqlSessionFactoryBuilder sqlSessionFactoryBuilder=new SqlSessionFactoryBuilder();
SqlSessionFactory factory = sqlSessionFactoryBuilder.build(in);
//使用SqlSessionFactory类打开数据库会话
SqlSession sqlSession = factory.openSession();
//使用SqlSession对象动态加载DAO实体类,并返回
IUserDao userDao = sqlSession.getMapper(IUserDao.class);
//下面就是调用方法去使用了,这里之所以不用创建DAO实体类是因为SqlSession对象动态加载DAO实体类,我//们无需手动创建了,直接拿来用,当然也可以自己写实体类,感兴趣可以去查阅资料不赘述
// 查询所有用户信息
List<User> users = userDao.findAll();
Iterator<User> iterator = users.iterator();
while (iterator.hasNext())
{
User user=iterator.next();
System.out.println("查询所有信息:"+user.toString());
}
// 根据用户ID查询信息
User userById = userDao.findUserById("77665 ");
System.out.println("根据id查询信息" +userById.toString());
// 更新用户信息
User upuser=new User();
upuser.setId("77668");
upuser.setUsername("admin1233");
upuser.setPassword("admin");
upuser.setBrithday("2020-01-01");
upuser.setEmail("123@132.com");
userDao.updateUser(upuser);
System.out.println("updateOK");
userDao.delUser("77700");
// 添加用户
User inuser=new User();
inuser.setUsername("insteruser12");
inuser.setPassword("admin");
inuser.setBrithday("2020-01-01");
inuser.setEmail("123@132.com");
userDao.inseterUser(inuser);
// 删除用户
//注意!若存在insert 语句,会默认关闭自动提交事务,此时需要我们手动提交,方法如下
sqlSession.commit();
}
自此,mybatis的简单使用已经实现,