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{
Listperson=session.selectList("cn.itcast.Person.selectPersonForAll");
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);
Listperson=session.selectList("cn.itcast.Person.selectPersonByIn",map);
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