javaMyBatis知识点总结.docx
- 文档编号:7903614
- 上传时间:2023-01-27
- 格式:DOCX
- 页数:24
- 大小:100.94KB
javaMyBatis知识点总结.docx
《javaMyBatis知识点总结.docx》由会员分享,可在线阅读,更多相关《javaMyBatis知识点总结.docx(24页珍藏版)》请在冰豆网上搜索。
javaMyBatis知识点总结
MyBatis
学习mybatis入门Example:
第一步:
建立java工程
第二步:
导入jar包
第三步:
编写配置文件
①.sqlMapConfig.xml
②.jdbc.properties及log4j.properties(略)
③.编写Mapper.xml文件
xmlversion="1.0"encoding="UTF-8"?
>
DOCTYPEmapper
PUBLIC"-//mybatis.org//DTDMapper3.0//EN"
"http:
//mybatis.org/dtd/mybatis-3-mapper.dtd">
select*frompersonwhereid=#{id}
④.编写javabean类(略)
⑤.编写测试类
publicclassMyBatisTest{
SqlSessionFactorysqlSessionFactory;
@Before
publicvoidsetUp()throwsException{
InputStreamin=Resources.getResourceAsStream("sqlMapConfig.xml");
sqlSessionFactory=newSqlSessionFactoryBuilder().build(in);
}
@Test
publicvoidtest(){
SqlSessionsession=sqlSessionFactory.openSession();
Personperson;
try{
person=session.selectOne("cn.itcast.Person.selectPerson",1);
System.out.println(person);
}finally
{
session.close();
}
}
}
⑥.运行结果
2014-05-1901:
16:
49,657[main]DEBUG[cn.itcast.Person.selectPerson]-==>Preparing:
select*frompersonwhereid=?
2014-05-1901:
16:
49,677[main]DEBUG[cn.itcast.Person.selectPerson]-==>Parameters:
1(Integer)
Person[id=1,name=张无忌,birthday=MonMay1200:
00:
00CST2014,address=陕西,salary=2312]
发现运行成功,sql语句生成成功。
注意:
javabean没有set,get方法,也能注入值成功
ØMybatis的简单查询
第一:
javabean可以和数据库字段不一致,不一致时需要在配置文件指明
数据表如下:
发现字段使用了下划线:
javabean属性命名必须遵循驼峰模式
那么现在我使用上面的Test进行查询时:
(查询前:
把select*frompersonwhereperson_id=#{id}修改为数据库字段)
查询结果:
Person[personId=null,name=张无忌,birthday=MonMay1200:
00:
00CST2014,personAddress=null,salary=2312]
我们发现:
personId和personAddress都为null,而其他的全部有值。
可以发现:
他们的值没有匹配上,即数据库的字段和javabean的字段不匹配。
那么解决方案是:
在mapper文件中创建映射Map:
--
#{id}:
接收参数的语法publicvoidadd(Stringname),采用欲查询的策略,一个参数的时候{}内的参数名任意
parameterType:
输入参数的类型
resultType:
返回值的类型
-->
mappernamespace="cn.itcast.Person">
select*frompersonwhereperson_id=#{id}
查询结果为:
Person[personId=1,name=张无忌,birthday=MonMay1200:
00:
00CST2014,personAddress=陕西,salary=2312]
发现空值消失,真值出现。
第二:
查询数据条数
①.创建select代码
selectid="selectCount"resultType="int">
selectCOUNT(*)fromperson
②.编写test代码
publicvoidtest1(){
SqlSessionsession=sqlSessionFactory.openSession();
intperson;
try{person=session.selectOne("cn.itcast.Person.selectCount");
System.out.println(person);
}finally
{
session.close();
}
}
第三:
返回类型Map
select*frompersonwhereperson_id=#{id}
@Test
publicvoidtest2(){
SqlSessionsession=sqlSessionFactory.openSession();
try{
Mapperson=session.selectOne("cn.itcast.Person.selectPersonForMap",1);
System.out.println(person);
}finally
{
session.close();
}
}
第四:
使用map传递参数
1.编写配置文件Mapper
select*frompersonwhereperson_id=#{id}andsalary=#{salary}
②.编写java代码
publicvoidtest3(){
SqlSessionsession=sqlSessionFactory.openSession();
try{
Mapmap=newHashMap();
map.put("id",1);
map.put("salary",2312);
Personperson=session.selectOne("cn.itcast.Person.selectPersonForList",map);
System.out.println(person);
}finally
{
session.close();
}
}
第五:
查询返回List集合
1.编写配置文件
select*fromperson
②.编写测试代码
publicvoidtest4(){
SqlSessionsession=sqlSessionFactory.openSession();
try{
List
System.out.println(person);
}finally
{
session.close();
}
}
第六:
模糊查询
①.编写配置文件
--模糊查询:
${}:
用于模糊查询,采用品字符串的形式
-->
select*frompersonpwherep.namelike'%${name}%'
②.编程代码
publicvoidtest6(){
SqlSessionsession=sqlSessionFactory.openSession();
try{
Mapmap=newHashMap();
map.put("name","张");
Personperson=session.selectOne("cn.itcast.Person.selectPersonByLike",map);
System.out.println(person);
}finally
{
session.close();
}
}
第七:
传递参数使用javabean
①.编写配置文件
--
#{name}:
name是实体类里的get方法后面的字符串
-->
select*frompersonpwherep.person_id=#{id}
②.编写javabean
③.编写java代码进行调用
publicvoidtest5(){
SqlSessionsession=sqlSessionFactory.openSession();
try{
Conditionc=newCondition();
c.setId
(1);
Personperson=session.selectOne("cn.itcast.Person.selectPersonByCondition",c);
System.out.println(person);
}finally
{
session.close();
}
}
第八:
进行数据保存
①.编写xml文件
--
做了两件事:
主键的自增,主键的返回
keyProperty:
实体类里面的主键
order:
主键生成和sql语句执行的顺序,在mysql中AFTER,oracle中是BEFORE
resultType:
实体类中主键的类型
selectLAST_INSERT_ID():
mysql的主键生成语句
selectxxx.nextvalfromdual:
oracle的主键生成语句
-->
selectLAST_INSERT_ID()
insertintoperson(person_id,name,birthday,person_address,salary)
values(#{personId},#{name},#{birthday},#{personAddress},#{salary})
②.编写java测试代码
publicvoidtest7(){
SqlSessionsession=sqlSessionFactory.openSession();
try{
Personp=newPerson();
p.setPersonAddress("西安");
p.setBirthday(newDate());
p.setSalary(50000);
p.setName("黄花");
session.insert("cn.itcast.Person.insert",p);
mit();
}catch(Exceptione){
session.rollback();
}
finally
{
session.close();
}}
第九:
批量插入
第十:
动态sql进行查询
①.编写配置文件
--where标签可以自动处理第一个and,if之中的test中与{}中的值一致-->
select*frompersonp
=null"> andp.namelike'%${name}%' =null"> andp.person_addresslike'%${personAddr}%' =null"> [CDATA[ andp.salary>#{salary} ]]> =null"> [CDATA[ andp.birthday>#{birthday} ]]> ②.编写代码 @Test publicvoidtest8(){ SqlSessionsession=sqlSessionFactory.openSession(); try{ Mapmap=newHashMap(); map.put("name","张"); map.put("personAddr","陕西"); map.put("salary",2000); Personperson=session.selectOne("cn.itcast.Person.selectPersonByConditions",map); System.out.println(person); }finally{ session.close();}} 第十: 批量查询 ①.编写配置文件 -- collection: 集合,map中的集合的key open: 以某种字符开始 close: 以某种字符结尾 index: 当前遍历到的位置 item: 集合中每一项 separator: 集合中每项之间的分隔符 map.put("ids",list); map.put("name","zhangsan") 如果map中只用集合,没有形如: map.put("name","zhangsan")需要使用foreach可以省略parameterType="map",collection可以直接从map中获得集合 --> select*frompersonpwherep.person_idin #{personId} --andp.name=#{name}--> ②.编写java代码 @Test publicvoidselectPersonByIn(){ SqlSessionsession=sqlSessionFactory.openSession(); try{ Listlist=newArrayList(); list.add (1); list.add (2); Mapmap=newHashMap(); map.put("ids",list); List System.out.println(person); }finally { session.close(); }} 查询结果: 2014-05-2110: 33: 38,736[main]DEBUG[cn.itcast.Person.selectPersonByIn]-==>Preparing: select*frompersonpwherep.person_idin(? ? ) 2014-05-2110: 33: 38,767[main]DEBUG[cn.itcast.Person.selectPersonByIn]-==>Parameters: 1(Integer),2(Integer) [Person[personId=1,name=张无忌,birthday=MonMay1200: 00: 00CST2014,personAddress=陕西,salary=2312],Person[personId=2,name=周芷若,birthday=FriMay2300: 00: 00CST2014,personAddress=陕西,salary=5679]] 第十一: 批量插入 ①.编写配置文件 -- insertintoperson(person_id,name) values(1,'zhangsan'),(2,'lisi'),.... --> selectLAST_INSERT_ID() insertintoperson(person_id,name,birthday,person_address,salary) values (#{person.personId},#{person.name},#{person.birthday},#{person.personAddress},#{person.salary}) ②.编写代码 publicvoidtest9(){ SqlSessionsession=sqlSessionFactory.openSession(); List
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- javaMyBatis 知识点 总结