接上一篇博客代码基础进行MyBatis的动态操作
上一篇博客地址:https://blog.csdn.net/qq_41852212/article/details/88918780
mybaits动态操作
相比较于 dao 层开发 需要 UserDao 及它的实现类 还有 UserMapper.xml 。mapper 动态代理开发 只需要 一个接口 和 UserMapper.xml 加快了开发速度。所以采用动态代理的方式来进行操作数据库。还有注解等方式来操作数据库,会其中的一种即可,当然全都会那更好。
使用mybaits动态操作CUBD
1.新建一个接口
public interface UserMapper
{
// 1 接口方法名 与mapper.xml 中的 要调用的sql 语句的id 要一致
// 2 接口的形参类型需要与 mappe.xml parameterType 一致
// 3 返回值类型也需要 与 resultType相一致
// 4 mapper.xml 中 namespace 要与接口的全包名一致
// 5 mapper 动态代理开发中 根据返回值类型自动选择 selectOne (id查询) selectList (模糊查询)
public User selectUserById(Integer id);
// public List<User> User selectUser(User user);
// 再来一遍
// 接口方法名要与 调用的sql的语句中的id 一致
// 接口的类型要与 parameterType 一致
// 返回值类型要与 resultType 一致
public List<User> selectUserByName(String username);
public void insertUser(User user);
public void updateUser(User user);
public void deleteUserById(int id);
}
接口中的方法的方法名字要与UserMapper.xml 中要调用的sql语句的id一致
接口中的形参类型要与UserMapper.xml 中parameterType 类型一致
接口的返回值类型要与resultType类型一致
UserMapper.xml 中namespace 要与接口的全包名一致
2.新建测试类 使用Junit 进行测试
查询用户
@Test
//通过id查询用户
public void Test1() throws IOException
{
String source = "sqlMapConfig.xml";
// 读取配置文件
InputStream in = Resources.getResourceAsStream(source);
// 需要 sqlSeesionFactotyBuliber
SqlSessionFactory ssf = new SqlSessionFactoryBuilder().build(in);
// 生产一个sqlSession
SqlSession session = ssf.openSession();
UserMapper mapper = session.getMapper(UserMapper.class);
User user = mapper.selectUserById(2);
System.out.println(user);
// 相比较于 dao 层开发 需要 UserDao 及它的实现类 还有 UserMapper.xml
// mapper 动态代理开发 只需要 一个接口 和 UserMapper.xml 加快了开发速度
}
通过新建一个 mapper对象来得到动态代理的接口
然后使用接口中的方法来查询
插入用户
@Test
// 插入用户
public void Test3() throws IOException
{
String source = "sqlMapConfig.xml";
// 读取配置文件
InputStream in = Resources.getResourceAsStream(source);
// 需要 sqlSeesionFactotyBuliber
SqlSessionFactory ssf = new SqlSessionFactoryBuilder().build(in);
// 生产一个sqlSession
SqlSession session = ssf.openSession();
// 操作数据库
UserMapper mapper = session.getMapper(UserMapper.class);
User user = new User();
user.setU_id(19);
user.setU_username("小明");
user.setU_password("1231323");
user.setU_cid(1);
user.setU_sex("1");
mapper.insertUser(user);
session.commit();这里一定要提交,不然数据进不去数据库中
}
在对数据库进行操作之后一定要 commit ,要不然会出现编译器运行成功而数据库没有变化的错误。
整个项目结构图如下
githup链接:https://github.com/wannengdek/MyBatis
完整代码如下:
package test;
import java.io.IOException;
import java.io.InputStream;
import java.util.List;
import mapper1.UserMapper;
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 bean.User;
public class MapperTest
{
@Test
public void Test1() throws IOException
{
String source = "sqlMapConfig.xml";
// 读取配置文件
InputStream in = Resources.getResourceAsStream(source);
// 需要 sqlSeesionFactotyBuliber
SqlSessionFactory ssf = new SqlSessionFactoryBuilder().build(in);
// 生产一个sqlSession
SqlSession session = ssf.openSession();
// 操作数据库
UserMapper mapper = session.getMapper(UserMapper.class);
User user = mapper.selectUserById(2);
System.out.println(user);
// 相比较于 dao 层开发 需要 UserDao 及它的实现类 还有 UserMapper.xml
// mapper 动态代理开发 只需要 一个接口 和 UserMapper.xml 加快了开发速度
}
@Test
// 模糊查询
public void Test2() throws IOException
{
String source = "sqlMapConfig.xml";
// 读取配置文件
InputStream in = Resources.getResourceAsStream(source);
// 需要 sqlSeesionFactotyBuliber
SqlSessionFactory ssf = new SqlSessionFactoryBuilder().build(in);
// 生产一个sqlSession
SqlSession session = ssf.openSession();
// 操作数据库
UserMapper mapper = session.getMapper(UserMapper.class);
List<User> userlist = mapper.selectUserByName("王");
for (User u : userlist)
{
System.out.println(u);
}
}
@Test
// 插入用户
public void Test3() throws IOException
{
String source = "sqlMapConfig.xml";
// 读取配置文件
InputStream in = Resources.getResourceAsStream(source);
// 需要 sqlSeesionFactotyBuliber
SqlSessionFactory ssf = new SqlSessionFactoryBuilder().build(in);
// 生产一个sqlSession
SqlSession session = ssf.openSession();
// 操作数据库
UserMapper mapper = session.getMapper(UserMapper.class);
User user = new User();
user.setU_id(19);
user.setU_username("小明");
user.setU_password("1231323");
user.setU_cid(1);
user.setU_sex("1");
mapper.insertUser(user);
session.commit();这里一定要提交,不然数据进不去数据库中
}
@Test
//更新用户
public void Test4() throws IOException
{
String source = "sqlMapConfig.xml";
// 读取配置文件
InputStream in = Resources.getResourceAsStream(source);
// 需要 sqlSeesionFactotyBuliber
SqlSessionFactory ssf = new SqlSessionFactoryBuilder().build(in);
// 生产一个sqlSession
SqlSession session = ssf.openSession();
// 操作数据库
UserMapper mapper = session.getMapper(UserMapper.class);
User user= new User();
user.setU_id(19);
user.setU_username("小明");
mapper.updateUser(user);
session.commit();
// 相比较于 dao 层开发 需要 UserDao 及它的实现类 还有 UserMapper.xml
// mapper 动态代理开发 只需要 一个接口 和 UserMapper.xml 加快了开发速度
}
@Test
//删除
public void Test5() throws IOException
{
String source = "sqlMapConfig.xml";
// 读取配置文件
InputStream in = Resources.getResourceAsStream(source);
// 需要 sqlSeesionFactotyBuliber
SqlSessionFactory ssf = new SqlSessionFactoryBuilder().build(in);
// 生产一个sqlSession
SqlSession session = ssf.openSession();
// 操作数据库
UserMapper mapper = session.getMapper(UserMapper.class);
mapper.deleteUserById(19);
session.commit();
// 相比较于 dao 层开发 需要 UserDao 及它的实现类 还有 UserMapper.xml
// mapper 动态代理开发 只需要 一个接口 和 UserMapper.xml 加快了开发速度
}
}
如有不正之处 ,还请指正,万分感谢。