mybatis使用xml进行增删改查代码解析
MyBatis是支持普通sql查询、存储过程和高级映射的持久层框架。
MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及对结果集的检索封装。
MyBatis可以使用简单的XML或注解用于配置和原始映射,将接口和Java的POJO(PlainOldJavaObjects普通的Java对象)映射成数据库中的记录。
每一个Mybatis应用程序都以一个sqlSessionFactory对象的实例为核心。
sqlSessionFactory对象的实例可以通过sqlSessionFactoryBuilder对象来获得。sqlSessionFactoryBuilder对象可以通过xml配置文件,或从以往使用管理中准备好的Configuration类实例中来构建sqlSessionFactory对象。
【示例:使用配置类获取sqlSessionFactory】
DataSourcedataSource=BlogDataSourceFactory.getBlogDataSource(); TransactionFactorytransactionFactory=newJdbcTransactionFactory(); //环境 Environmentenvironment=newEnvironment("development",transactionFactory,dataSource); Configurationconfiguration=newConfiguration(environment); //映射器类 configuration.addMapper(BlogMapper.class); SqlSessionFactorysqlSessionFactory=newSqlSessionFactoryBuilder().build(configuration);
注意这种情况下配置是添加映射器类。映射器类是Java类,这些类包含SQL映射语句的注解从而避免了xml文件的依赖,但是xml映射仍然在大多数高级映射(比如:嵌套join映射)时需要。
出于这样的原因,如果存在xml配置文件的话,MyBatis将会自动查找和加载一个对等的XML文件(这种情况下,基于类路径下的BlogMapper.class类的类名,那么BlogMapper.xml将会被加载–即class与XML在同一个文件目录下。如果非,则需要手动配置加载xml)。
【1】基本增删改查xml配置
select*fromt_userwhereid=#{id} deletefromt_userwhereid=#{id} updatet_usersetusername=#{name},age=#{age}whereid=#{id} insertintot_user(username,age)values(#{name},#{age}) select*fromt_user
注册到mybatis.xml[当与spring结合时,将不需要这个配置文件]
mybatis的配置文件
【2】通过SqlSessionFactory拿到session
这里使用xml文件获取sqlSessionFactory和sqlSession。
publicstaticSqlSessionFactorygetFactory(){ /*flowthesrcdir*/ Stringresource="mybatis.xml"; /*MybatisUtils.class.getResourceAsStream(resource)-----it'swrong!!!! *pleasedistinguishthetwoupanddown **/ InputStreaminputStream=MybatisUtils.class.getClassLoader().getResourceAsStream(resource); SqlSessionFactoryfactory=newSqlSessionFactoryBuilder().build(inputStream); returnfactory; } SqlSessionsession=factory.openSession(true); //默认手动提交; /* 两种解决方式: 1.factory.opensession(true); 2.session.commit(); */
【3】增删改查后台测试代码
/*usesqlxmlnotannotation*/ @Test publicvoidtestAdd(){ SqlSessionsession=MybatisUtils.getFactory().openSession(); Stringstatement="com.web.mapper.userMapper.insertUser"; /*returntheeffectrows*/ intinsert=session.insert(statement,newUser("tom5",15)); /*defaultisnotautocommit*/ session.commit(true); session.close(); System.out.println("effectrows.."+insert); } @Test publicvoidtestSelect(){ /*setautocommit,whichequalstotheabove*/ SqlSessionsession=MybatisUtils.getFactory().openSession(true); Stringstatement="com.web.mapper.userMapper.getUser"; /*returntheeffectrows*/ Useruser=session.selectOne(statement,3); System.out.println("effectrows.."+user); } @Test publicvoidtestUpdate(){ SqlSessionsession=MybatisUtils.getFactory().openSession(true); Stringstatement="com.web.mapper.userMapper.updateUser"; /*returntheeffectrows*/ intupdate=session.update(statement,newUser(3,"tom4",13)); System.out.println("effectrows.."+update); } @Test publicvoidtestDelete(){ SqlSessionsession=MybatisUtils.getFactory().openSession(); Stringstatement="com.web.mapper.userMapper.deleteUser"; /*returntheeffectrows*/ intdelete=session.delete(statement,6); /*commitbyyourself*/ session.commit(); System.out.println("effectrows.."+delete); session.close(); } @Test publicvoidtestGetUsers(){ SqlSessionsession=MybatisUtils.getFactory().openSession(); Stringstatement="com.web.mapper.userMapper.getUsers"; /*returntheList*/ List users=session.selectList(statement); session.commit(); System.out.println("effectrows.."+users); session.close(); }
Tips:
parameterType和resultType为hashmap:
- mapper.xml:
select*fromc_userwhereid=#{id};
- testcode:
@Test publicvoidgetUserForMap(){ SqlSessionsession=MybatisUtils.getFactory().openSession(); Stringstatement="com.web.mapper.userMapper.getUserForMap"; HashMapmap=newHashMap (); map.put("id",1); /*returntheeffectrows*/ ObjectselectOne=session.selectOne(statement,map); /*defaultisnotautocommit*/ session.commit(true); session.close(); System.out.println("effectrows.."+selectOne+",class:"+selectOne.getClass()); }
- resultasfollows:
effectrows..{id=1,age=12,name=luli},class:classjava.util.HashMap
综上可知:mybatis会根据参数类型和结果类型,自动进行解析封装。
【扩展基本方法】
【1】分页列表
selectid,site_id,site_name,site_number,province,city,area,address,internal_number,longitude,latitude fromtb_site --使用动态sql andcheck_state=#{checkState,jdbcType=INTEGER} andsite_idlikeconcat('%',#{siteId},'%') andsite_namelikeconcat('%',#{siteName},'%') andsite_numberlikeconcat('%',#{siteNumber},'%') andprovince=#{province} andcity=#{city} andarea=#{area} --添加排序 orderby${sortname}${sortorder} --添加分页 limit${(page-1)*pagesize},${pagesize}
【2】删除方法–根据对象或者Id
如果参数为pojo,mybatis会自动从对象里面获取id;
deletefromtb_user where id=#{id} deletefromtb_user where id=#{id}
【3】根据idlist删除数据
deletefromtb_user whereidin --使用foreach #{id}
【4】getRows
通常与getListPage联合使用。
selectcount(*)fromtb_sys_role andid=#{keySysRole.id} andname=#{keySysRole.name} andavailable=#{keySysRole.available}
总结
以上就是本文关于mybatis使用xml进行增删改查代码解析的全部内容,希望对大家有所帮助。感兴趣的朋友可以继续参阅本站其他相关专题,如有不足之处,欢迎留言指出。感谢朋友们对本站的支持!