mybatis使用xml进行增删改查代码解析

网友投稿 279 2023-02-18


mybatis使用xml进行增删改查代码解析

MyBatis是支持普通sql查询、存储过程和高级映射的持久层框架。

MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及对结果集的检索封装。

MyBatis可以使用 简单的XML或注解用于配置和原始映射,将接口和java的POJO(Plain Old Java Objects 普通的Java对象)映射成数据库中的记录。

每一个Mybatis应用程序都以一个sqlSessionFactory对象的实例为核心。

sqlSessionFactory对象的实例可以通过sqlSessionFactoryBuilder对象来获得。sqlSessionFactoryBuilder对象可以通过xml配置文件,或从以往使用管理中准备好的Configuration类实例中来构建sqlSessionFactory对象。

【示例:使用配置类获取sqlSessionFactory】

DataSource dataSourhttp://ce = BlogDataSourceFactory.getBlogDataSource();

TransactionFactory transactionFactory = new JdbcTransactionFactory();

//环境

Environment environment = new Environment("development", transactionFactory, dataSource);

Configuration configuration = new Configuration(environment);

//映射器类

configuration.addMapper(BlogMapper.class);

SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(configuration);

注意这种情况下配置是添加映射器类。映射器类是Java类,这些类包含SQL映射语句的注解从而避免了xml文件的依赖,但是xml映射仍然在 大多数高级映射(比如:嵌套join映射)时需要。

出于这样的原因,如果存在xml配置文件的话,MyBatis将会自动查找和加载一个对等的XQWwnJnpML文件(这种情况下,基于类路径下的BlogMapper.class类的类名,那么BlogMapper.xml将会被加载–即class 与 XML在同一个文件目录下。如果非,则需要手动配置加载xml)。

【1】基本增删改查xml配置

select * from t_user where id=#{id}

delete from t_user where id=#{id}

update t_user set username=#{name},age=#{age} where id=#{id}

insert into t_user(username,age) values(#{name},#{age})

select * from t_user

注册到mybatis.xml [当与spring结合时,将不需要这个配置文件]

mybatis的配置文件

【2】通过SqlSessionFactory拿到session

这里使用xml文件获取sqlSessionFactory和sqlSession。

public static SqlSessionFactory getFactory(){

/* flow the src dir*/

String resource = "mybatis.xml";

/*MybatisUtils.class.getResourceAsStream(resource)----- it's wrong !!!!

* please distinguish the two up and down

* */

InputStream inputStream = MybatisUtils.class.getClassLoader().getResourceAsStream(resource);

SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(inputStream);

return factory;

}

SqlSession session = factory.openSession(true);

//默认手动提交;

/*

两种解决方式:

1.factory.opensession(true);

2.session.commit();

*/

【3】增删改查后台测试代码

/*use sql xml not annotation*/

@Test

public void testAdd(){

SqlSession session = MybatisUtils.getFactory().openSession();

String statement = "com.web.mapper.userMapper.insertUser";

/*return the effect rows*/

int insert= session.insert(statement, new User("tom5", 15));

/*default is not auto commit*/

session.commit(true);

session.close();

System.out.println("effect rows.."+insert);

}

@Test

public void testSelect(){

/*set auto commit ,which equals to the above*/

SqlSession session = MybatisUtils.getFactory().openSession(true);

String statement = "com.web.mapper.userMapper.getUser";

/*return the effect rows*/

User user = session.selectOne(statement, 3);

System.out.println("effect rows.."+user);

}

@Test

public void testUpdate(){

SqlSession session = MybatisUtils.getFactory().openSession(true);

String statement = "com.web.mapper.userMapper.updateUser";

/*return the effect rows*/

int update= session.update(statement, new User(3,"tom4", 13));

System.out.println("effect rows.."+update);

}

@Test

public void testDelete(){

SqlSessionQWwnJnp session = MybatisUtils.getFactory().openSession();

String statement = "com.web.mapper.userMapper.deleteUser";

/*return the effect rows*/

int delete= session.delete(statement, 6);

/* commit by yourself*/

session.commit();

System.out.println("effect rows.."+delete);

session.close();

}

@Test

public void testGetUsers(){

SqlSession session = MybatisUtils.getFactory().openSession();

String statement = "com.web.mapper.userMapper.getUsers";

/*return the List*/

List users= session.selectList(statement);

session.commit();

System.out.println("effect rows.."+users);

session.close();

}

Tips :

parameterType 和 resultType 为 hashmap :

mapper.xml :

select * from c_user where id=#{id};

test code :

@Test

public void getUserForMap(){

SqlSession session = MybatisUtils.getFactory().openSession();

String statement = "com.web.mapper.userMapper.getUserForMap";

HashMap map = new HashMap();

map.put("id", 1);

/*return the effect rows*/

Object selectOne = session.selectOne(statement, map);

/*default is not auto commit*/

session.commit(true);

session.close();

System.out.println("effect rows.."+selectOne+" ,class :"+selectOne.getClass());

}

result as follows :

effect rows..{id=1, age=12, name=luli} ,class :class java.util.HashMap

综上可知:mybatis 会根据参数类型和结果类型,自动进行解析封装。

【扩展 基本方法】

【1】分页列表

select id,site_id,site_name,site_number,province,city,area,address,internal_number,longitude,latitude

from tb_site

--使用动态sql

and check_state = #{checkState,jdbcType=INTEGER}

and site_id like concat('%',#{siteId},'%')

and site_name like concat('%',#{siteName},'%')

and site_number like concat('%', #{siteNumber},'%')

and province = #{province}

and city = #{city}

and area = #{area}

--添加排序

order by ${sortname} ${sortorder}

--添加分页

limit ${(page-1)*pagesize},${pagesize}

【2】删除方法–根据对象或者Id

如果参数为pojo,mybatis会自动从对象里面获取id ;

delete from tb_user

where

id = #{id}

delete from tb_user

where

id = #{id}

【3】根据 id list 删除数据

delete from tb_user

where id in

--使用foreach

#{id}

【4】getRows

通常与getListPage联合使用。

select count(*) from tb_sys_role

and id = #{keySysRole.id}

and name = #{keySysRole.name}

and available = #{keySysRole.available}

总结

以上就是本文关于mybatis使用xml进行增删改查代码解析的全部内容,希望对大家有所帮助。感兴趣的朋友可以继续参阅本站其他相关专题,如有不足之处,欢迎留言指出。感谢朋友们对本站的支持!


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Hibernate组件映射代码详解
下一篇:微信开发者工具的接口(微信开发者工具接口执行异常是什么意思)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~