mybatis学习笔记(2)两种配置实现增删改查
【摘要】 第二天学习mybatis,发现框架的存在确实是省了我们很多时间,我们完全可以把一些操作简化,或者实现简单的封装提供我们使用。昨天是跟着教程云里雾里的实现了配置,今天再次使用就方便很多。
String resource="conf.xml";
//使用类加载mybatis驱动文件,(他也加载关联的附带文件)
InputStream is=Test.class....
- 第二天学习mybatis,发现框架的存在确实是省了我们很多时间,我们完全可以把一些操作简化,或者实现简单的封装提供我们使用。昨天是跟着教程云里雾里的实现了配置,今天再次使用就方便很多。
String resource="conf.xml";
//使用类加载mybatis驱动文件,(他也加载关联的附带文件)
InputStream is=Test.class.getClassLoader().getResourceAsStream(resource);
//构建sqlsession工厂
SqlSessionFactory sessionFactory=new SqlSessionFactoryBuilder().build(is);
- 1
- 2
- 3
- 4
- 5
- 首先记得昨天创建工厂时候这么亢长的代码吧,我们将他封装起来,让这个封装返回一个SqlSession对象,创建returnsqlsession类
封装部分的代码为:
package com.test.test1;
import java.io.InputStream;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
public class returnsqlsession {
public static SqlSessionFactory getSqlSessionFactory()
{
String resource="conf.xml";
InputStream in=returnsqlsession.class.getClassLoader().getResourceAsStream(resource);
SqlSessionFactory factory=new SqlSessionFactoryBuilder().build(in);
return factory;
}
public static SqlSession getSqlSession(){//返回sqlsession
return getSqlSessionFactory().openSession();
}
/**
* 获取SqlSession
* @param isAutoCommit * true 表示创建的SqlSession对象在执行完SQL之后会自动提交事务
* false 表示创建的SqlSession对象在执行完SQL之后不会自动提交事务,这时就需要我们手动调用sqlSession.commit()提交事务
* @return SqlSession
*/
public static SqlSession getSqlSession(boolean isAutoCommit) {
return getSqlSessionFactory().openSession(isAutoCommit);
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
方法一:xml配置
然后,我们要现在xml中添加数据库的语句userMapper.xml内容如下:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper SYSTEM "http://mybatis.org/dtd/mybatis-3-mapper.dtd" PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN">
-<mapper namespace="userMapper">
<!-- 在select标签中编写查询的SQL语句, 设置select标签的id属性为getUser,id属性值必须是唯一的,不能够重复使用parameterType属性指明查询时使用的参数类型,resultType属性指明查询返回的结果集类型 resultType="me.gacl.domain.User"就表示将查询结果封装成一个User类的对象返回 User类就是users表所对应的实体类 -->
<!-- 根据id查询得到一个user对象 -->
<select resultType="com.test.mybits.User" parameterType="Integer" id="getuser">select * from users where id=#{id} </select>
<!-- 增删改查 -->
<!-- 增 indesert -->
<insert parameterType="com.test.mybits.User" id="adduser">insert into users(name,age) values(#{name},#{age}) </insert>
<delete parameterType="Integer" id="deleteuser">delete from users where id=#{id} </delete>
<update parameterType="com.test.mybits.User" id="updateuser">update users set name=#{name},age=#{age} where id=#{id} </update>
<select resultType="com.test.mybits.User" id="datesearch">select * from users </select>
</mapper>
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
建议不要一次全部写完,可以一条一条写,并且也可以知道那对拿错,可以即使修正。
接着,在测试类中进行逐步测试:
package com.test.test1;
import java.io.IOException;
import java.util.List;
import org.apache.ibatis.session.SqlSession;
import com.test.mybits.User;
public class test2 {
public static void testadd()
{
SqlSession sqlsession=returnsqlsession.getSqlSession(true);//默认自动提交事务
String statement="userMapper.adduser";
User user=new User();
user.setname("abch");
user.setage(25);
int result=sqlsession.insert(statement, user);
sqlsession.close();
System.out.println(result); }
public static void testdelete()
{
SqlSession sqlsession=returnsqlsession.getSqlSession(true);
String statement="userMapper.deleteuser";
int result=sqlsession.delete(statement,3);
sqlsession.close();
System.out.println(result);
}
public static void testupdate()
{
SqlSession sqlsession=returnsqlsession.getSqlSession(true);
String statement="userMapper.updateuser";
User user=new User();
user.setid(1);
user.setage(19);
user.setname("赛爷哈哈");
int reslut=sqlsession.update(statement, user);
sqlsession.close();
System.out.println(reslut);
}
public static void testsearch()
{
SqlSession sqlsession=returnsqlsession.getSqlSession(true);
String statement="userMapper.datesearch";
List list=sqlsession.selectList(statement); sqlsession.clearCache();
System.out.println(list);
}
public static void main(String[] args) throws IOException
{
// testadd();
//testdelete();
//testupdate();
testsearch();
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
配置的时候注意查询需要的类型,以及返回的类型,有些操做不支持返回类型。
方法二:注解配置
创建com.test.mapper包。创建userMapper2.java接口
内容为:
package com.test.mapper;
import java.util.List;
import org.apache.ibatis.annotations.Delete;
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.annotations.Update;
import com.test.mybits.User;
public interface userMapper2 {
@Insert("insert into users(name,age) values(#{name},#{age})")
public int add(User user);
//使用@Delete注解指明deleteById方法要执行的SQL
@Delete("delete from users where id=#{id}")
public int deleteById(int id); //使用@Update注解指明update方法要执行的SQL
@Update("update users set name=#{name},age=#{age} where id=#{id}")
public int update(User user); //使用@Select注解指明getById方法要执行的SQL
@Select("select * from users where id=#{id}")
public User getById(int id); //使用@Select注解指明getAll方法要执行的SQL
@Select("select * from users")
public List getAll();
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
注解里面放方法,下面再声明一个共有函数。
再测试类中,具体使用如下:
package com.test.test1;
import java.util.List;
import org.apache.ibatis.session.SqlSession;
import com.test.mapper.userMapper2;
import com.test.mybits.User;
public class test3 {
public static void testadd(){
SqlSession sqlsession=returnsqlsession.getSqlSession(true);
//得到userMapper2接口的实现类对象,userMapper2接口的实现类对象由sqlsession.getMapper(UserMapper2.class)动态构建出来 userMapper2 mapper = sqlsession.getMapper(userMapper2.class); User user=new User(); user.setname("呜呜呜我真菜"); user.setage(17); int add=mapper.add(user); sqlsession.close(); System.out.println(add); }
public static void testupdate()
{
SqlSession sqlsession=returnsqlsession.getSqlSession(true);
userMapper2 mapper=sqlsession.getMapper(userMapper2.class);
User user=new User();
user.setage(155);
user.setid(4);
user.setname("白龙吟");
int update=mapper.update(user);
sqlsession.close();
System.out.println(update);
}
public static void testdelete()
{
SqlSession sqlsession=returnsqlsession.getSqlSession(true);
userMapper2 mapper=sqlsession.getMapper(userMapper2.class);
int id=7;
int delete=mapper.deleteById(id);
sqlsession.close();
System.out.println(delete);
}
public static void getuser()
{
SqlSession sqlsession=returnsqlsession.getSqlSession(true);
userMapper2 mapper=sqlsession.getMapper(userMapper2.class);
int id=6;
User user=mapper.getById(id);
sqlsession.close();
System.out.println(user);
}
public static void getalluser()
{
SqlSession sqlsession=returnsqlsession.getSqlSession(true);
userMapper2 mapper=sqlsession.getMapper(userMapper2.class);
Listlist=mapper.getAll();
sqlsession.close();
System.out.println(list);
}
public static void main(String[] args) {
//testadd();
//testupdate();
//testdelete();
//getuser();
getalluser();
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
使用的方法差不了太多,运用了反射的思想。实际的配置名称还是以具体为主,mybatis操作数据比起sql语句真的方便很多。
文章来源: bigsai.blog.csdn.net,作者:Big sai,版权归原作者所有,如需转载,请联系作者。
原文链接:bigsai.blog.csdn.net/article/details/82695146
【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)