Mybatis——CRUD操作
Posted 红颜莫知己
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Mybatis——CRUD操作相关的知识,希望对你有一定的参考价值。
目录
查询
查询和其他的操作不一样,我们需要一个返回类型resultType
<select id="findAll" resultType="edu.xalead.Channel">
select * from t_channel
</select>
查询测试
public class MybatisTest
/**
* 创建mybatis工厂
*/
SqlSession sqlSession = null;
@Before
public void createSession()
try
//读取配置文件
InputStream in = Resources.getResourceAsStream("SqlMapConfig.xml");
//创建SqlSessionFactory的构建者对象
SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
//创建SqlSessionFactory工厂
SqlSessionFactory factory = builder.build(in);
//创建连接(会话)
sqlSession = factory.openSession();
catch (IOException e)
e.printStackTrace();
@After
public void closeSession()
if (sqlSession != null) sqlSession.close();
@Test
public void test1()
List<Object> list = sqlSession.selectList("edu.xalead.Channel.findAll");
System.out.println(list);
我们的单元测试中就写了两行代码,非常的简单
查询一个对象
<!--配置只查询一个对象操作-->
<select id="findChannelById" resultType="edu.xalead.Channel">
select * from t_channel where cid = #cid
</select>
查询一个对象测试
@Test
public void test5()
Channel o = sqlSession.selectOne("edu.xalead.Channel.findChannelById", 15);
System.out.println(o);
添加
<!--配置添加操作-->
<insert id="addChannel">
insert into t_channel(cid,cname,description) values (#cid,#cname,#description)
</insert>
添加测试
在这里我们需要注意一点,数据库的增删改查中都会涉及到事务,而Mybatis里的事务是自动开始的,只要你创建了Mybatis工厂事务就存在,我们在这行测试方法中@After下,不要先关闭连接,我们先提交,否则你的数据库将没办法
@After
public void closeSession()
if (sqlSession != null)
//提交
sqlSession.commit();
sqlSession.close();
@Test
public void test2()
Channel c = new Channel();
c.setCid(16);
c.setCname("周杰伦");
c.setDescription("依然范特西");
sqlSession.insert("edu.xalead.Channel.addChannel",c);
更新
<!--配置更新操作-->
<update id="updateChannel">
update t_channel set cname=#cname,description=#description where cid = #cid
</update>
更新测试
我们不一定一定要用Channel类,只要参数名一样就行,我们可以使用map来添加参数
@Test
public void test3()
Map<String,Object> c = new HashMap<String, Object>();
c.put("cid",16);
c.put("cname","周杰伦");
c.put("description","叶惠美");
sqlSession.insert("edu.xalead.Channel.updateChannel",c);
删除
<!--配置删除操作-->
<delete id="delChannel">
delete from t_channel where cid = #cid
</delete>
其实这里#cid里面的cid可以是任何名称,无所谓,前面对就行了
删除测试
@Test
public void test4()
sqlSession.delete("edu.xalead.Channel.delChannel",16);
后边的参数就是cid
注意:增删改执行的时候都会执行事务,我有点没写,但我们要知道,它执行了
sqlSession.commit();
- 在学习CRUD操作之前一定要会在IDEA中进行配置,创建Mybatis工厂,若有不懂的学者,可以转博客MyBatis——在IDEA中配置mybatis框架
创建SqlMapConfig.xml数据库连接
<?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>
<!-- 配置 mybatis 的环境 -->
<environments default="mysql">
<!-- 配置 mysql 的环境 -->
<environment id="mysql">
<!-- 配置事务的类型 -->
<transactionManager type="JDBC"></transactionManager>
<!-- 配置连接数据库的信息:用的是数据源(连接池) -->
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/cms"/>
<property name="username" value="root"/>
<property name="password" value="root"/>
</dataSource>
</environment>
</environments>
<!-- 告知 mybatis 映射配置的位置 -->
<mappers>
<mapper resource="edu.xalead/IChannel.xml"/>
</mappers>
</configuration>
创建配置查询的映射文件Channel.xml
在这里我们需要注意,我们需要把他创建到和Channel实体类的同一个包下,但是我们不能把xml放在java底下,他是不认xml,具体原因博主也不太懂,涉及到maven运行机制
所以我们应该将其放在resources中,创建和Channel实体类同样的包,最后编译以后他们会放在一起,我们可以打开target目录进行查看
<?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="edu.xalead.Channel">
<!-- 配置查询所有操作 -->
<select id="findAll" resultType="edu.xalead.Channel">
select * from t_channel
</select>
</mapper>
这里标签select中的数据,可以仿照这写,基本写法都是这样,但一定要写对,尤其是SqlMapConfig.xml里面的mapper,非常容易写错
<!-- 告知 mybatis 映射配置的位置 -->
<mappers>
<mapper resource="edu/xalead/Channel.xml"/>
</mappers>
若有误,请指教!!!
以上是关于Mybatis——CRUD操作的主要内容,如果未能解决你的问题,请参考以下文章
MyBatis学习总结——使用MyBatis对表执行CRUD操作(转载)
阶段3 1.Mybatis_05.使用Mybatis完成CRUD_3 Mybatis的CRUD-修改和删除操作