先创建空的Maven项目
Maven仓库中找依赖包
先Maven的pom.xml中添加Mybatis的依赖
4.0.0 org.example Mybatis 1.0-SNAPSHOT scr/main/resource ***.xml true src/main/java ***.xml true org.mybatis mybatis 3.4.6 mysql mysql-connector-java 5.1.47 junit junit 4.12 test com.github.pagehelper pagehelper 5.1.10 log4j log4j 1.2.16 UTF-8
在src/main/resource/下面创建mybatis-config.xml配置文件
Mybatis的核心配置文件
编写Mybatis的工具类
package com.lzj.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;
public class MybatisUtils {
private static SqlSessionFactory sqlSessionFactory;
static{
try {
//获取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();
}
}
dao接口
package com.lzj.dao;
import com.lzj.entity.User;
import java.util.List;
public interface UserDao {
//获取所有用户对象
List getUserList();
}
接口实现类.xml
select * from mybatis.user
Junit单元测试
package com.lzj.dao;
import com.lzj.entity.User;
import com.lzj.utils.MybatisUtils;
import org.apache.ibatis.session.SqlSession;
import org.junit.Test;
import java.util.List;
public class UserMapperTest {
@Test
public void test(){
//1. 获取SqlSession对象
SqlSession sqlSession = MybatisUtils.getSqlSession();
//2. 执行sql
UserDao userDao = sqlSession.getMapper(UserDao.class);
List users= userDao.getUserList();
for (User user : users){
System.out.println(user);
}
//3. 关闭SqlSession
sqlSession.close();
}
}
注意点:org.apache.ibatis.binding.BindingException: Type interface com.lzj.dao.UserDao is not known to the MapperRegistry.
Mapper.xml没有在Mybatis核心配置文件中注册
还是报错
Could not find resource com/lzj/dao/UserMapper
at org.apache.ibatis.exceptions.ExceptionFactory.wrapException(ExceptionFactory.java:30)没有找到资源路径
由于Maven约定大于配置,我们写的配置文件可能到处失败,因为默认的资源目录是在resource目录下
资源过滤问题
我们发现target下面没有UserMapper.xml文件除非自己拷贝,但是每一次自己拷贝太麻烦了
解决办法,手动导入pom.xml之中
scr/main/resource ***.xml true src/main/java ***.xml true
但是又报错了
因为我们数据库里面有中文
在pom.xml里面加上
UTF-8
最后结果
MyBatis如何执行sql语句
SqlSessionFactoryBuilder 获取SqlSessionFactory
SqlSessionFactory 获取SqlSession
SqlSession.getMapper(Dao.class) 获取接口的实现类
调用实现类的函数-----》执行sql
此外,每次执行SqlSession都要关闭
创建一个Mybatis程序的步骤
首先我们先创建一个空的Maven项目
1.先配置pom.xml文件
注意事项:
(1)先导入Mybatis的依赖
(2)标签进行resources的配置将java路径下的配置文件相当于放到resources目录下
(3) UTF-8
解决中文乱码编译不通过的报错
2. 配置Mybatis-config.xml配置文件
注意事项:
(1) configuration核心配置文件联建数据库
(2)
将xxxMapper.xml再核心配置文件中注册绑定,相当于告诉系统xxxMapper.xml是xxx接口的实现类
后期系统自动创建
3. 获取SqlSession
自己写一个工具列MyBatis获取SqlSession
SqlSessionFactoryBuilder->SqlSessionFactory->SqlSession
4. 编写DAO接口
5. 编写实现类 xxxMapper.xml
注意事项:
(1) 绑定接口
(2) 各个查询标签的id对应着接口中的方法
6. 如何执行sql语句
先调用Mybatis获取SqlSession实现对象
sqlSession.getMapper(xxxDAO.class)获取接口的实现类
调用实现类的的函数,------>调用sql语句
增删改查
1.namespace的绑定的包名,要和接口的包名一致
2.select 选择查询
-
id: 对应namespace的方法名
-
resultType: 返回值得类型
-
parameterType: 传递参数的类型
举例 通过id查询user //只要该三个地方, 接口, Mapper添加一个标签, 测试了获取Sqlsession //测试类 @Test public void test01(){ SqlSession sqlSession = MybatisUtils.getSqlSession(); UserDao userDao = sqlSession.getMapper(UserDao.class); User user = userDao.getUserById(688); System.out.println(user); sqlSession.close(); } //接口 public interface UserDao { //获取所有用户对象 ListgetUserList(); //通过id获取对象 User getUserById(int id); } //Mapper.xml添加标签
注意增删改都需要提交事物才能执行 sqlSession.commit()
4.update更新操作测试类
@Test public void testAddUser(){ SqlSession sqlSession = MybatisUtils.getSqlSession(); UserDao userDao = sqlSession.getMapper(UserDao.class); userDao.addUser(new User("沙冕","899","20010118")); sqlSession.commit(); sqlSession.close(); }接口类
package com.lzj.dao; import com.lzj.entity.User; import java.util.List; public interface UserDao { //获取所有用户对象 ListgetUserList(); //通过id获取对象 User getUserById(int id); //插入一个对象 void addUser(User user); } 接口Mapper.xml实现类
参数是对象的时候,直接利用#{属性名}获取属性名
5.delete记得同样需要sqlSession.commit();
@Test public void testUpdateUser(){ SqlSession sqlSession = MybatisUtils.getSqlSession(); UserDao userDao = sqlSession.getMapper(UserDao.class); userDao.updateUser(new User("君冕","999","20001218")); sqlSession.commit(); sqlSession.close(); }接口
package com.lzj.dao; import com.lzj.entity.User; import java.util.List; public interface UserDao { //获取所有用户对象 ListgetUserList(); //通过id获取对象 User getUserById(int id); //插入一个对象 void addUser(User user); //更新一个对象 int updateUser(User user); } Mapper.xml实现类
update user set password = #{password}, id = #{id} where name = #{name}
记得同样需要sqlSession.commit();
测试类
@Test public void testDeleteUser(){ SqlSession sqlSession = MybatisUtils.getSqlSession(); UserDao userDao = sqlSession.getMapper(UserDao.class); userDao.deleteUser(new User("德玛西亚","477","akak")); sqlSession.commit(); sqlSession.close(); }接口
package com.lzj.dao; import com.lzj.entity.User; import java.util.List; public interface UserDao { //获取所有用户对象 ListgetUserList(); //通过id获取对象 User getUserById(int id); //插入一个用户对象 void addUser(User user); //更新一个用户对象 int updateUser(User user); //删除一个用户对象 int deleteUser(User user); } Mapper.xml实现类
delete from user where id = #{id}



