一,什么是Mybatis?
二,为什么需要Mybatis?
三,制作第一个mybatis程序
1.搭建数据库
创建一个父类的项目,里面创建module项目,在子类的pom.xml文件中创建一个<parent></parent>
<parent>
<groupId>org.example</groupId>
<artifactId>mybatisPractice</artifactId>
<version>1.0-SNAPSHOT</version>
</parent>
parent里面的三行是从父类的pom.xml文件中复制过来就好
2.创建项目,导入依赖
导入mybatis依赖还有mysql依赖
mybatis依赖去百度mybatis官网上搜索,复制下来就好
3.编写配置文件mybatis-config.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"> <configuration> <environments default="development"> <environment id="development"> <transactionManager type="JDBC"/> <dataSource type="POOLED"> <property name="driver" value="${driver}"/> <property name="url" value="${url}"/> <property name="username" value="${username}"/> <property name="password" value="${password}"/> </dataSource> </environment> </environments> <mappers> <mapper resource="org/mybatis/example/BlogMapper.xml"/> </mappers> </configuration>
官网上搜即可
4.搭建框架
在resources下创建db.properties文件
注意,写命令时不能加空格和分号
在mybatis-config.xml文件中引入db.properties文件
然后在resources下创建directory目录Mapper下创建UserMapper.xml文件(名字随意.xml)
创建好后去官网上复制
<?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"> <mapper namespace="org.mybatis.example.BlogMapper"> <select id="selectBlog" resultType="Blog"> select * from Blog where id = #{id} </select> </mapper>
这个,然后这个和上面mybatis-config.xml要连接起来,
在创建一个接口,用来连接刚才新建的那个.xml文件
现在我们这三个就连接起来了
5.创建工具类
package com.util;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import java.io.IOException;
import java.io.InputStream;
public class BaseDaoUtil {
private static SqlSessionFactory sessionFactory;
static {
InputStream inputStream = null;
try {
inputStream = Resources.getResourceAsStream("mybatis-config.xml");
sessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
} catch (IOException e) {
e.printStackTrace();
}
}
//获取SqlSession对象
public static SqlSession sqlSession(){
return sessionFactory.openSession();
}
}
写入静态代码块里是为了更好的被其他类调用
6.创建实体类
创建一个pojo包下创建一个实体类(User 名字随意),写上n个属性,获取getter/setter方法,获取有参无参函数,
1-1,查找数据库所有信息
在接口中写入方法
List<User> queryUserList();
然后去新建的UserMapper.xml文件中写sql语句
<select id="queryUserList" resultType="user">
select * from user;
</select>
这里面的id就是接口中的方法名,resultType需要映射返回值User,因为接口中写的要返回User对象,所以要映射
7.创建测试类test
创建一个测试类UserMapperTest(类名随意),
这样就可以查到所有的数据了
1-2,增加信息
还是一样在接口中写方法
int addUser(User user);
然后去UserMapper.xml文件中写sql语句
<insert id="addUser" parameterType="com.yhzz.pojo.User">
insert into user (id,userName,pwd)
values (#{id},#{userName},#{pwd});
</insert>
接口中参数是user类,所以parameterType是接收参数类型的,parameterType=“User实体类的路径地址”
然后去测试类测试
@Test
public void addUser(){
SqlSession sqlSession = BaseDaoUtil.sqlSession();
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
int rows = mapper.addUser(new User(1, "张紫怡", "250"));
System.out.println("新增数据"+rows+"条");
sqlSession.commit();
sqlSession.close();
}
ok搞定!
1-3修改信息
写接口
int updateUser(User user);
接着去写sql语句
<update id="updateUser" parameterType="com.yhzz.pojo.User">
update user set userName = #{userName},pwd = #{pwd} where id = #{id};
</update>
然后测试类写
@Test
public void updateUser(){
SqlSession sqlSession = BaseDaoUtil.sqlSession();
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
int name = mapper.updateUser(new User(3, "zhuang", "200"));
System.out.println("修改成功"+name+"条");
sqlSession.commit();
sqlSession.close();
}
1-4 删除信息
写接口
int deleteUser(@Param("id") int id);
写sql语句,在这里参数是int,parameterType=“这里直接写int,与前面的参数要对应”
<delete id="deleteUser" parameterType="int">
delete from user where id = #{id};
</delete>
写测试
@Test
public void deleteUser(){
SqlSession sqlSession = BaseDaoUtil.sqlSession();
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
int i = mapper.deleteUser(6);
System.out.println("删除"+i+"条数据");
//增删改需要提交事务
sqlSession.commit();
sqlSession.close();
}
在这里会有人说,为啥有的里面有sqlSession.commit();有的没有
因为查找数据的时候是不需要提交事务的
增删改都需要手动提交事务,sqlSession.commit();手动提交事务