目录
1.首先上来就给你一个错位的信息:
2.配置MyBatis环境其实是比较简单,我们第一步选择使用MAVEN来搭建项目。
3.第三部就是在资源下创建配置信息的文件 (resources下的)mybatis-config.xml
4.在test包下面:进行测试
5.创建domain 以及我的创建:
下面是我的类里面的具体实现:我使用了 lombok
我在接口中实现的方法(dao或者是mapper)
工具类:utils 因为使用sqlSessonfactory 太麻烦?
测试:
sql语句:
1.首先上来就给你一个错位的信息:
### Error querying database.? Cause: java.lang.IllegalArgumentException: Mapped Statements collection does not contain value for com.csi.smbms.domain.User.class.findCount ### Cause: java.lang.IllegalArgumentException: Mapped Statements collection does not contain value for com.csi.smbms.domain.User.class.findCount
大家很好奇这是什么原因吧?
哈哈哈哈
这是因为没在配置信息(mybatis-config.xml)里 进行mapper映射!所以就会产生的错误信息
2.配置MyBatis环境其实是比较简单,我们第一步选择使用MAVEN来搭建项目。
进去项目后就是配置maven环境,以及在pom.xml文件中导入依赖------->下面是我的pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.csi</groupId>
<artifactId>two</artifactId>
<version>1.0-SNAPSHOT</version>
<properties>
<maven.compiler.source>8</maven.compiler.source>
<maven.compiler.target>8</maven.compiler.target>
</properties>
导入依赖
<dependencies>
mybatis的依赖
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.7</version>
</dependency>
和数据库连接
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.30</version>
</dependency>
测试类中TEST
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.13.2</version>
<scope>test</scope>
</dependency>
日志 和对应的日志
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
这个是domain下使用 可以使用DATA GET SET 和构造函数等
非常好用
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.24</version>
</dependency>
</dependencies>
</project>
3.第三部就是在资源下创建配置信息的文件 (resources下的)mybatis-config.xml

下面是mybatis-config.xml 的具体信息? 在mybatis的中文网中也可以找到:MyBatis中文网
?
<?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>
<!--属性配置文件-->
<properties resource="jdbc.properties" />
<!--给对象做别名-->
<typeAliases>
<!--给某一个类做别名-->
<!--<typeAlias type="com.csi.smbms.domain.User" alias="User" />-->
<!--扫描某一个包,将包中所有类全部自动化命名。规则是将首字母大写!-->
<package name="com.csi.smbms.domain"/>
</typeAliases>
<environments default="development">
<environment id="development">
<!--事务的管理-->
<transactionManager type="JDBC"/>
<!--数据连接池-->
<dataSource type="POOLED">
<property name="driver" value="com.mysql.cj.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/smbms"/>
<property name="username" value="root"/>
<property name="password" value="root"/>
</dataSource>
</environment>
</environments>
<mappers>
<!--加载对应的映射文件-->
<mapper resource="com/csi/smbms/domain/UserMapper.xml" />
<mapper resource="com/csi/smbms/domain/ProviderMapper.xml" />
</mappers>
</configuration>
4.在test包下面:进行测试

?在这个类中进行测试 sqlSession 是否能用!
package com.csi.test;
import com.csi.smbms.domain.Provider;
import com.csi.smbms.domain.User;
import com.csi.smbms.utils.MyBatisUtils;
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 org.junit.Test;
import java.io.IOException;
import java.io.InputStream;
import java.util.List;
public class MyBatisTest {
@Test
public void testUserCount1() throws IOException {
SqlSession sqlSession = MyBatisUtils.getSqlSession();
System.out.println("sqlSession测试:"+sqlSession);
int result = sqlSession.selectOne("com.csi.smbms.domain.User.findCount");
System.out.println("user的人数:" + result);
//关闭SqlSession
MyBatisUtils.close();
}
@Test
public void testUserTianjia() throws IOException {
//步骤1:读取配置文件
InputStream is = Resources.getResourceAsStream("mybatis-config.xml") ;
//步骤2:通过API对应的功能实现数据库链接
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(is) ;
//步骤2-1:创建链接
//SqlSession:提供的是一套完整的针对数据库的CRUD操作
SqlSession sqlSession = factory.openSession() ;
User user = new User();
user.setUserCode("hahahha");
user.setUserName("xiaojie");
user.setUserPassword("123456");
//关闭SqlSession
sqlSession.close();
}
@Test
public void testProviderList() throws IOException {
//步骤1:读取配置文件
InputStream is = Resources.getResourceAsStream("mybatis-config.xml") ;
//步骤2:通过API对应的功能实现数据库链接
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(is) ;
//步骤2-1:创建链接
//SqlSession:提供的是一套完整的针对数据库的CRUD操作
SqlSession sqlSession = factory.openSession() ;
List<Provider> Providers = sqlSession.selectList("com.csi.smbms.domain.Provider.list");
System.out.println("provider的list集合展示所有人的信息:");
Providers.forEach(System.out::println);
//关闭SqlSession
sqlSession.close();
}
@Test
public void testProviderCount() throws IOException {
//步骤1:读取配置文件
InputStream is = Resources.getResourceAsStream("mybatis-config.xml") ;
//步骤2:通过API对应的功能实现数据库链接
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(is) ;
//步骤2-1:创建链接
//SqlSession:提供的是一套完整的针对数据库的CRUD操作
SqlSession sqlSession = factory.openSession() ;
int result = sqlSession.selectOne("com.csi.smbms.domain.Provider.findCount");
System.out.println("Provider的人数:" + result);
//关闭SqlSession
sqlSession.close();
}
@Test
public void testUserList() throws IOException {
//步骤1:读取配置文件
InputStream is = Resources.getResourceAsStream("mybatis-config.xml") ;
//步骤2:通过API对应的功能实现数据库链接
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(is) ;
//步骤2-1:创建链接
//SqlSession:提供的是一套完整的针对数据库的CRUD操作
SqlSession sqlSession = factory.openSession() ;
List<User> users = sqlSession.selectList("com.csi.smbms.domain.User.list");
System.out.println("user的list集合展示所有人的信息:");
users.forEach(System.out::println);
//关闭SqlSession
sqlSession.close();
}
@Test
public void testUserCount() throws IOException {
//步骤1:读取配置文件
InputStream is = Resources.getResourceAsStream("mybatis-config.xml") ;
//步骤2:通过API对应的功能实现数据库链接
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(is) ;
//步骤2-1:创建链接
//SqlSession:提供的是一套完整的针对数据库的CRUD操作
SqlSession sqlSession = factory.openSession() ;
int result = sqlSession.selectOne("com.csi.smbms.domain.User.findCount");
System.out.println("user的人数:" + result);
//关闭SqlSession
sqlSession.close();
}
这个测试下就是第一次测试看看sqlsession是否能用!
@Test
public void testInit() throws IOException {
//步骤1:读取配置文件
InputStream is = Resources.getResourceAsStream("mybatis-config.xml") ;
//步骤2:通过API对应的功能实现数据库链接
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(is) ;
System.out.println("factory:"+factory);
//步骤2-1:创建链接
//SqlSession:提供的是一套完整的针对数据库的CRUD操作
SqlSession sqlSession = factory.openSession() ;
System.out.println("测试:"+sqlSession);
//关闭SqlSession
sqlSession.close();
}
}
5.创建domain 以及我的创建:

?这样简单的MyBatis 就弄好了:
下面是我的类里面的具体实现:我使用了 lombok
package com.csi.smbms.domain;
import lombok.Data;
import java.io.Serializable;
import java.util.Date;
@Data
public class User implements Serializable {
private Long id ;
private String userCode ;
private String userName ;
private String userPassword ;
private int gender ;
private Date birthday ;
private String phone ;
private String address ;
private long userRole ;
private long createdBy ;
private Date creationDate ;
private long modifyBy ;
private Date modifyDate ;
}
我在接口中实现的方法(dao或者是mapper)
package com.csi.smbms.mapper;
import com.csi.smbms.domain.User;
import java.util.List;
import java.util.Map;
public interface UserMapper {
int findCount() ;
List<User> list() ;
int save(User user) ;
User findById(long id) ;
List<User> findLike(String userName) ;
User findCondition(User user) ;
User findByMap(Map<String,Object> map) ;
User login(String userCode , String userPassword) ;
User login1(User user) ;
User login2(Map<String,Object> map) ;
}
工具类:utils 因为使用sqlSessonfactory 太麻烦?
package com.csi.smbms.utils;
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;
/**
* MyBatis的工具类
*/
public class MyBatisUtils {
private static SqlSessionFactory factory ;
private static ThreadLocal<SqlSession> tl = new ThreadLocal<>() ;
static{
InputStream is = null;
try {
is = Resources.getResourceAsStream("mybatis-config.xml");
} catch (IOException e) {
throw new RuntimeException(e);
}
//步骤2:通过API对应的功能实现数据库链接
factory = new SqlSessionFactoryBuilder().build(is) ;
}
public static SqlSession getSqlSession() {
SqlSession sqlSession = tl.get(); /*
* 创建SqlSession对象
*/
//判断本地线程中是否已经存在SqlSession
if(sqlSession == null) {
System.out.println("创建了SqlSession对象");
//如果不存在则构建一个新的SqlSession,同时存放在ThreadLocal中
sqlSession = factory.openSession() ;
tl.set(sqlSession);
}
return sqlSession ;
}
/**
* 资源关闭
*/
public static void close() {
SqlSession sqlSession = tl.get();
if(sqlSession != null) {
System.out.println("关闭了SqlSession对象");
sqlSession.close();
tl.set(null);
}
}
}
测试:
package com.csi.test;
import com.csi.smbms.mapper.UserMapper;
import com.csi.smbms.domain.User;
import com.csi.smbms.utils.MyBatisUtils;
import org.apache.ibatis.session.SqlSession;
import org.junit.Test;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class MyBatisMapperTest {
@Test
public void testUserLogin2(){
SqlSession sqlSession = MyBatisUtils.getSqlSession();
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
Map<String,Object> map = new HashMap<>() ;
map.put("userCode","admin") ;
map.put("userPassword","1234657");
User user = userMapper.login2(map);
System.out.println(user);
MyBatisUtils.close();
}
@Test
public void testUserLogin1(){
SqlSession sqlSession = MyBatisUtils.getSqlSession();
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
User user = new User();
user.setUserCode("admin");
user.setUserPassword("1234567");
System.out.println(user);
MyBatisUtils.close();
}
@Test
public void testUserLogin(){
SqlSession sqlSession = MyBatisUtils.getSqlSession();
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
User user = userMapper.login("admin", "1234567");
System.out.println(user);
MyBatisUtils.close();
}
@Test
public void testUserFindByMap(){
SqlSession sqlSession = MyBatisUtils.getSqlSession();
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
Map<String,Object> map = new HashMap<>() ;
map.put("userRole","1") ;
map.put("userCode","admin") ;
User user = userMapper.findByMap(map);
System.out.println(user);
MyBatisUtils.close();
}
@Test
public void testUserFindCondition(){
SqlSession sqlSession = MyBatisUtils.getSqlSession();
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
User user= new User() ;
user.setUserCode("admin");
user.setUserRole(1);
user= userMapper.findCondition(user);
System.out.println("对象查询:"+user);
MyBatisUtils.close();
}
@Test
public void testUserSave(){
SqlSession sqlSession = MyBatisUtils.getSqlSession();
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
int save = 0;
try {
User user = new User();
user.setUserCode("wangde");
user.setUserName("王德");
user.setUserPassword("123456");
user.setAddress("tianjin");
user.setUserRole(2L);
user.setBirthday(new Date());
user.setCreatedBy(1L);
user.setGender(2);
user.setPhone("2132165156");
user.setCreationDate(new Date());
save = userMapper.save(user);
sqlSession.commit();
} catch (Exception e) {
sqlSession.rollback();
throw new RuntimeException() ;
}finally {
MyBatisUtils.close();
}
}
@Test
public void testUserFindLike(){
SqlSession sqlSession = MyBatisUtils.getSqlSession();
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
List<User> users = userMapper.findLike("孙");
users.forEach(System.out::println);
MyBatisUtils.close();
}
@Test
public void testUserFindById(){
SqlSession sqlSession = MyBatisUtils.getSqlSession();
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
User user = userMapper.findById(1L);
System.out.println("user duixiang ::"+user);
MyBatisUtils.close();
}
@Test
public void testUserCount(){
SqlSession sqlSession = MyBatisUtils.getSqlSession();
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
int num = userMapper.findCount();
System.out.println("userMapper count 个数是:"+num);
MyBatisUtils.close();
}
@Test
public void testUserList(){
SqlSession sqlSession = MyBatisUtils.getSqlSession();
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
List<User> list = userMapper.list();
System.out.println("userMapper count 个数是:");
list.forEach(System.out::println);
MyBatisUtils.close();
}
}
sql语句:
<?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="com.csi.smbms.mapper.UserMapper">
<select id="findLike" resultType="User" parameterType="String">
select * from smbms_user where userName Like CONCAT('%',#{userName},'%')
</select>
<select id="findById" resultType="com.csi.smbms.domain.User" parameterType="long">
select * from smbms_user where id = #{id}
</select>
<select id="findCount" resultType="int">
select count(*) from smbms_user
</select>
<select id="list" resultType="com.csi.smbms.domain.User">
select * from smbms_user
</select>
<insert id="save" parameterType="User">
insert into smbms_user
(userCode,userName,userPassword,gender,birthday,phone,address,userRole,createdBy,creationDate)
values
(#{userCode},#{userName},#{userPassword},#{gender},#{birthday},#{phone},#{address},#{userRole},#{createdBy},#{creationDate})
</insert>
<select id="findCondition" parameterType="User" resultType="User">
select * from smbms_user where userCode = #{userCode} AND userRole = #{userRole}
</select>
<select id="findByMap" parameterType="map" resultType="User">
select * from smbms_user where userCode = #{userCode} AND userRole = #{userRole}
</select>
<select id="login" resultType="User" parameterType="String">
select *
from smbms_user
where userCode = #{userCode} AND userPassword = #{userPassword};
</select>
<select id="login1" resultType="User" parameterType="User">
select *
from smbms_user
where userCode = #{userCode} AND userPassword = #{userPassword};
</select>
<select id="login2" resultType="User" parameterType="map">
select *
from smbms_user
where userCode = #{userCode} AND userPassword = #{userPassword};
</select>
</mapper>
|