步骤:
第一步:创建一个用于测试的数据库
1、创建数据库
create database demo
2、创建表
create table stu(
sno int PRIMARY KEY,
sname VARCHAR(25),
sage int,
saddress VARCHAR(25),
spwd VARCHAR(25))ENGINE=INNODB DEFAULT CHARSET=utf8;
3、插入数据
INSERT into stu VALUES(1,'小兰',18,'上海','123456');
第二步:创建maven项目,完成项目结构搭建!导入相关依赖jar包,创建实体类
1、项目结构
2、在pom.xml中添加依赖(额外在加上静态资源过滤)
<!--添加防止静态资源过滤--> <build> <resources> <resource> <directory>src/main/java</directory> <includes> <include>**/*.properties</include> <include>**/*.xml</include> </includes> <filtering>false</filtering> </resource> <resource> <directory>src/main/resources</directory> <includes> <include>**/*.properties</include> <include>**/*.xml</include> </includes> <filtering>false</filtering> </resource> </resources> </build> <!--添加依赖--> <dependencies> <!--mybatis相关jar包--> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.5.6</version> </dependency> <!--与数据库连接相关jar包--> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.47</version> </dependency> <!--用于简便编写实体类工具Jar包--> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>1.16.12</version> </dependency> <!--用于测试的工具jar包--> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> <scope>test</scope> </dependency> </dependencies>
注意:1、在mybatis中,前两个依赖是必须有的!!!!后两个只是为了减少代码量非必须存在的。
2、为了防止后面运行时报错,在pom.xml添加防止过滤静态资源的配置信息,因为Maven可能会出现过滤静态资源问题
过滤静态资源:就是在编译的过程中,静态资源会被过滤掉,也就是在项目中target目录下没有静态资源。如这里的mybatis-config.xml核心配置文件不万万不可被过滤掉的
3、在pojo包下创建实体类Stu
package com.pojo;
import lombok.Data;
@Data
public class Stu {
private int sno;
private String sname;
private int sage;
private String saddress;
private String spwd;
}
第三步:创建mybatis的配置文件用于连接数据库,配置文件的有关数据源信息
1、在resources目录下创建mybatis-config.xml配置文件
2、编写配置文件的内容
<?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"> <!--旧版mysql应使用com.mysql.jdbc.Driver--> <property name="driver" value="com.mysql.jdbc.Driver"/> <!--useSSL=true 使用安全连接--> <!--& 转义 &--> <!--useUnicode=true 防止编码错误--> <!--characterEncoding=UTF-8 防止中文乱码--> <property name="url" value="jdbc:mysql://localhost:3306/demo?useSSL=true&useUnicode=true&characterEncoding=UTF-8"/> <!--数据库名--> <property name="username" value="root"/> <!--数据库密码!!!!--> <property name="password" value="hytsql"/> </dataSource> </environment> </environments> <!--mapper--> <mappers> <!--到具体的XXXMapper.xml文件 (必须是com/dao/StuMapper.xml而不是com.dao.StuMapper.xml)--> <mapper resource="com/dao/StuMapper.xml"/> </mappers> </configuration>
注意:此时还没用到<mappers> <mapper resource="com/dao/StuMapper.xml"/> </mappers>,只是提前写了!
第四步:编写一个工具类,用于获取数据库连接SqlSession对象
1、在until包下创建类MybatisUntil
package com.until;
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 MybatisUntil {
private static SqlSessionFactory sqlSessionFactory;
static{
try {
//加载mybatis配置文件
InputStream resourceAsStream = Resources.getResourceAsStream("mybatis-config.xml");
//获取sqlSessionFactory
sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream);
} catch (IOException e) {
e.printStackTrace();
}
}
//获取连接对象sqlSession
public static SqlSession getSqlSession(){
return sqlSessionFactory.openSession();
}
}
第五步:编写dao/mapper层,即创建一个XXXMapper接口,编写常用的而且简单的业务方法(查询、增加、删除、修改功能)
1、在dao包下创建StuMapper接口(或者StuDao),查询、增加、删除、修改功能方法
package com.dao;
import com.pojo.Stu;
import java.util.List;
public interface StuMapper {
//查询
List<Stu> queryAll();
//根据主键查询
Stu queryByKey(int sno);
//增加
int insert(Stu stu);
//修改(更新)
int upd(Stu stu);
//根据主键删除
int del(int sno);
}
第六步:创建对应的XXXMapper.xml文件,编写有关sql语句
1、在dao包下创建文件,文件名StuMapper.xml(或者StuDao.xml),这个文件在那一个包下都可以,习惯性把这个XXXMapper.xml文件与XXXMapper接口文件放在一起
<?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">
<!--namespace:完整的包类/接口名,即具体到对应的XXXMapper接口-->
<mapper namespace="com.dao.StuMapper">
<!--resultType:在没有给实体类起别名时,用完整的类名-->
<select id="queryAll" resultType="com.pojo.Stu">
<!--sql语句:查询-->
select * from stu;
</select>
<select id="queryByKey" parameterType="int" resultType="com.pojo.Stu">
<!--sql语句:根据查询-->
select * from stu where sno=#{sno};
</select>
<insert id="insert" parameterType="com.pojo.Stu">
<!--sql语句:增加-->
insert into stu value(#{sno},#{sname},#{sage},#{saddress},#{spwd});
</insert>
<update id="upd" parameterType="com.pojo.Stu">
update stu set sname=#{sname},sage=#{sage},saddress=#{saddress},spwd=#{spwd}
where sno=#{sno};
</update>
<delete id="del" parameterType="int">
<!--sql语句:删除-->
delete from stu where sno=#{sno};
</delete>
</mapper>
注意:此时就是需要用到在mybatis-config.xml中添加 <mappers> <mapper resource="com/dao/StuMapper.xml"/> </mappers>
第七步:测试
1、创建测试MybatisTest,注意附上的项目结构
2、编写MybatisTest代码,代码都是正确的,不截取结果图了!
package com.test;
import com.dao.StuMapper;
import com.pojo.Stu;
import com.until.MybatisUntil;
import org.apache.ibatis.session.SqlSession;
import org.junit.Test;
import java.util.List;
public class MybatisTest {
@Test
public void test01(){
//得到数据连接对象
SqlSession sqlSession = MybatisUntil.getSqlSession();
//得到XXXMapper接口对象,然后就能调用接口中的方法(实现操作数据库)
StuMapper mapper = sqlSession.getMapper(StuMapper.class);
//调用StuMapper接口中的方法
List<Stu> stus = mapper.queryAll();
//遍历结果集
for (Stu stu:stus) {
System.out.println(stu);
}
//关闭资源
sqlSession.close();
}
//根据主键查询
@Test
public void test02(){
//得到数据连接对象
SqlSession sqlSession = MybatisUntil.getSqlSession();
//得到XXXMapper接口对象,然后就能调用接口中的方法(实现操作数据库)
StuMapper mapper = sqlSession.getMapper(StuMapper.class);
//调用StuMapper接口中的方法
Stu stu = mapper.queryByKey(1);
System.out.println(stu);
//关闭资源
sqlSession.close();
}
//增加
@Test
public void test03(){
SqlSession sqlSession = MybatisUntil.getSqlSession();
StuMapper mapper = sqlSession.getMapper(StuMapper.class);
int insert = mapper.insert(new Stu(2, "小九", 18, "北京", "23456"));
//增加功能需要提交事务,不然在数据库中增加一条记录失败!!!!
sqlSession.commit();
System.out.println(insert != 0 ? "增加成功":"增加失败");
//关闭资源
sqlSession.close();
}
//修改(更新)
@Test
public void test04(){
SqlSession sqlSession = MybatisUntil.getSqlSession();
StuMapper mapper = sqlSession.getMapper(StuMapper.class);
int upd = mapper.upd(new Stu(2, "小九", 19, "南京", "456"));
//更新功能需要提交事务,不然在数据库中更新失败!!!!
sqlSession.commit();
System.out.println(upd != 0 ? "修改成功":"修改失败");
//关闭资源
sqlSession.close();
}
//测试删除
@Test
public void test(){
//得到数据连接对象
SqlSession sqlSession = MybatisUntil.getSqlSession();
//得到XXXMapper接口对象,然后就能调用接口中的方法(实现操作数据库)
StuMapper mapper = sqlSession.getMapper(StuMapper.class);
//调用StuMapper接口的删除方法
int del = mapper.del(90);
//删除功能需要提交事务,不然不能实现删除功能!!!!
sqlSession.commit();
System.out.println(del != 0 ? "删除成功":"删除失败");
//关闭资源
sqlSession.close();
}
}