一、MyBatis 环境搭建-----简单增删改查操作
思路:搭建环境 -->导入Mybatis -->编写代码 -->测试!
1、搭建数据库
新建三张表
用户表
图书表
2、新建一个普通的maven项目
3、导入maven依赖 —pom.xml
<!--父工程-->
<groupId>org.example</groupId>
<artifactId>Mybatis-Study</artifactId>
<packaging>pom</packaging>
<version>1.0-SNAPSHOT</version>
<modules>
<module>mybatis-01</module>
<module>second</module>
</modules>
<!--导入依赖-->
<dependencies>
<!--mysql驱动-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.47</version>
</dependency>
<!--mybatis-->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.2</version>
</dependency>
<!--junit-->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency>
<!--lombok-->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.16.10</version>
<scope>provided</scope>
</dependency>
</dependencies>
<!--在build中配置resources,来防止我们资源导出失败的问题 -->
<build>
<resources>
<resource>
<directory>src/main/resources</directory>
<includes>
<include>**/*.properties</include>
<include>**/*.xml</include>
</includes>
<filtering>true</filtering>
</resource>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.properties</include>
<include>**/*.xml</include>
</includes>
<filtering>true</filtering>
</resource>
</resources>
</build>
二、创建一个模块
1、编写mybatis的核心配置文件
mybatis-config.xml
<!--核心配置文件-->
<configuration>
<properties resource="db.properties"/>
<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>
<!--每一个Mapper.XMl都需要在Mybatis核心配置文件中注册 -->
<mappers>
<mapper resource="com/fwp/dao/BookMapper.xml"/>
<mapper resource="com/fwp/dao/UserMapper.xml"/>
</mappers>
</configuration>
db.properties—连接数据库 配置自己的账户和密码就好(根据自己的进行配置)
driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/mybatis?useUnicode=true&characterEncoding=UTF-8
username=root
password=fwp010330
2、编写mybatis工具类—MybatisUtils
//SqlSessionFactory --> SqlSession
public class MybatisUtils {
private static SqlSessionFactory sqlSessionFactory;
static {
try {
//使用Mybatis第一步:获取SqlSessionFactory对象
String resource = "mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
}catch (IOException e){
e.printStackTrace();
}
}
//既然有了 SqlSessionFactory,顾名思义,我们可以从中获得 SqlSession 的实例
//SqlSession 提供了在数据库执行 SQL 命令所需的所有方法。
public static SqlSession getSqlSession(){
return sqlSessionFactory.openSession();
}
三、编写代码
-
实体类—这里使用了lombok插件
-
在pom.xml中有添加这个依赖
<!--lombok--> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>1.16.10</version> <scope>provided</scope> </dependency>
Users.java
@Data @AllArgsConstructor @NoArgsConstructor public class Users { private int uid; private String uname; private String password; private int uage; }
Book.java
@Data @NoArgsConstructor @AllArgsConstructor public class Book { private int bid; private String bname; private String bauthor; private String publisher; }
-
Dao接口
UserMapper.java
public interface UserMapper { //查询语句 List<Users> getUserAll(); //添加一条记录 int addUser(Users users); //修改课本信息 int updateUser(Users users); //删除一条记录 int deleteUser(int uid); }
-
接口实现类 ---- 由原来的UserDaoImpl转换成一个Mapper配置文件。
UserMapper.xml
<!--namespace=绑定一个对应的Dao/Mapper接口--> <mapper namespace="com.fwp.dao.UserMapper"> <!--查询语句--> <select id="getUserAll" resultType="com.fwp.pojo.Users"> select *from mybatis.Users; </select> <!--添加语句--> <insert id="addUser" parameterType="com.fwp.pojo.Users"> insert into mybatis.users (uid,uname,password,uage) value (#{uid},#{uname},#{password},#{uage}) </insert> <!--修改语句--> <update id="updateUser" parameterType="com.fwp.pojo.Book"> update mybatis.users set uname=#{uname},password=#{password},uage=#{uage} where uid=#{uid}; </update> <!--删除语句--> <delete id="deleteUser" parameterType="int"> delete from mybatis.users where uid=#{uid}; </delete> </mapper>
-
同理BookMapper也是一样的。
BookMapper.java
public interface BookMapper { //查询全部book List<Book> getBookList(); //根据id查询 Book getBookById(int bid); //insert一个课本 int addBook(Book book); //修改课本信息 int updateBook(Book book); //删除一条记录 int deleteBook(int bid); }
-
接口实现类
BookMapper.xml
<!--namespace=绑定一个对应的Dao/Mapper接口--> <mapper namespace="com.fwp.dao.BookMapper"> <!--查询语句--> <select id="getBookList" resultType="com.fwp.pojo.Book"> select * from mybatis.books </select> <select id="getBookById" parameterType="int" resultType="com.fwp.pojo.Book"> select * from mybatis.books where bid =#{bid} </select> <!--对象中的属性,可以直接取出来--> <insert id="addBook" parameterType="com.fwp.pojo.Book"> insert into mybatis.books (bid,bname,bauthor,publisher) value (#{bid},#{bname},#{bauthor},#{publisher}); </insert> <!--修改语句--> <update id="updateBook" parameterType="com.fwp.pojo.Book"> update mybatis.books set bname=#{bname},bauthor=#{bauthor},publisher=#{publisher} where bid=#{bid}; </update> <!--删除语句--> <delete id="deleteBook" parameterType="int"> delete from mybatis.books where bid=#{bid}; </delete> </mapper>
四、测试
-
UserDaoTest
public class UserDaoTest { @Test public void getUserAll(){ SqlSession sqlSession = MybatisUtils.getSqlSession(); UserMapper mapper = sqlSession.getMapper(UserMapper.class); List<Users> users = mapper.getUserAll(); System.out.println(users); //关闭SqlSession sqlSession.close(); } @Test public void addUser(){ SqlSession sqlSession = MybatisUtils.getSqlSession(); UserMapper mapper = sqlSession.getMapper(UserMapper.class); int i = mapper.addUser(new Users(4, "王五", "654321", 22)); if (i>0){ System.out.println("记录插入成功!!!"); } //增删改一定要提交事务!!! sqlSession.commit(); //关闭SqlSession sqlSession.close(); } @Test public void updateUser(){ SqlSession sqlSession = MybatisUtils.getSqlSession(); UserMapper mapper = sqlSession.getMapper(UserMapper.class); int i = mapper.updateUser(new Users(4, "王五", "123456", 22)); if (i>0){ System.out.println("修改记录成功!!!"); } //增删改一定要提交事务!!! sqlSession.commit(); //关闭SqlSession sqlSession.close(); } @Test public void deleteUser(){ SqlSession sqlSession = MybatisUtils.getSqlSession(); UserMapper mapper = sqlSession.getMapper(UserMapper.class); int i = mapper.deleteUser(4); if (i>0){ System.out.println("删除记录成功!!!"); } //增删改一定要提交事务!!! sqlSession.commit(); //关闭SqlSession sqlSession.close(); } }
-
BookDaoTest
public class BookDaoTest { @Test public void test(){ //第一步 :获取SqlSession对象 SqlSession sqlSession = MybatisUtils.getSqlSession(); //方式一 :getMapper BookMapper bookDao = sqlSession.getMapper(BookMapper.class); List<Book> bookList = bookDao.getBookList(); //方式二: // List<Book> bookList = sqlSession.selectList("com.fwp.BookDao.getBookList"); for (Book book : bookList) { System.out.println(book); } //关闭SqlSession sqlSession.close(); } @Test public void getBookById(){ SqlSession sqlSession = MybatisUtils.getSqlSession(); BookMapper mapper = sqlSession.getMapper(BookMapper.class); Book book = mapper.getBookById(1); System.out.println(book); sqlSession.close(); } @Test public void addBook(){ SqlSession sqlSession = MybatisUtils.getSqlSession(); BookMapper mapper = sqlSession.getMapper(BookMapper.class); int res = mapper.addBook(new Book(4, "mybatis", "赵六", "黑马程序员")); if (res>0){ System.out.println("插入成功!"); } //增删改一定要提交事务 sqlSession.commit(); //关闭sqlSession sqlSession.close(); } @Test public void updateBook(){ SqlSession sqlSession = MybatisUtils.getSqlSession(); BookMapper mapper = sqlSession.getMapper(BookMapper.class); int res = mapper.updateBook(new Book(4, "JAVAEE", "赵六", "黑马程序员")); if (res>0){ System.out.println("修改成功!"); } //增删改一定要提交事务 sqlSession.commit(); //关闭sqlSession sqlSession.close(); } @Test public void deleteBook(){ SqlSession sqlSession = MybatisUtils.getSqlSession(); BookMapper mapper = sqlSession.getMapper(BookMapper.class); int res = mapper.deleteBook(4); if (res>0){ System.out.println("删除成功!"); } //增删改一定要提交事务 sqlSession.commit(); //关闭sqlSession sqlSession.close(); } }
五、常见问题
1.配置文件没有注册
2.绑定接口错误
3.方法名不对
4.返回类型不对
5.Maven导出资源问题