求火星情报第一季百度云三季百度云 链接

Mybatis的namespace问题说明 - 风漂雨落 - ITeye博客
博客分类:
&!--[if !supportLists]--&1.
&!--[endif]--&MyBatis的命名空间(我们以下图的文件结构来说明)
MyBatis的命名空间说的是POJO的XXx.xml文件中的&mapper namespace=”” /&,主要是跟三个地方有关系,
第一个是Configuration.xml的mappers属性
第二个是POJO的mapper接口如EmployeeMapper的类路径
第三个是DAO程序中的session.getConfiguration().addMapper(EmployeeMapper.class)
下面我来说一下他们三个之间的关系,我们
1)当只使用XML(不使用Anotation)的来配置mapper接口时,就是我们把sql配置在EmployeeMap.xml中时,若我们把namespace指明namespace设置为mapper接口的路径,即&mapper
namespace="com.wildrain.mapper.EmployeeMapper"&时,这样我们在程序中使用MyBatis来进行CRUD时, session.getConfiguration().addMapper(EmployeeMapper.class)这段代码可以不用写。我们来具体看一下这个三个地方的代码形式。
Configuration.xml的mappers
&typeAliases&
&typeAlias alias="Employee"
type="com.wildrain.domain.Employee" /&
&/typeAliases&
namespace="com.wildrain.mapper.EmployeeMapper"&
程序代码:
public void testGetAllEmployees(){
SqlSessionFactory sqlSessionFactory =
MyBatisUtil.getSessionFactory();
SqlSession session = sqlSessionFactory.openSession();
EmployeeMapper mapper = session.getMapper(EmployeeMapper.class);
List&Employee& ems = mapper.getAllEmployees();
for(Employee e:ems){
System.out.println(e);
} finally {
session.close();
若我们在employee.xml中的namespace是任意取的名字,而不是EmployeeMapper.java的类路径名,那么当我们在进行测试时,必须要添加一行代码session.getConfiguration().addMapper(EmployeeMapper.class)进行注册,下代码如下:
public void testGetAllEmployees(){
SqlSessionFactory sqlSessionFactory =
MyBatisUtil.getSessionFactory();
SqlSession session = sqlSessionFactory.openSession();
session.getConfiguration().addMapper(EmployeeMapper.class);
EmployeeMapper mapper = session.getMapper(EmployeeMapper.class);
List&Employee& ems = mapper.getAllEmployees();
for(Employee e:ems){
System.out.println(e);
} finally {
session.close();
2)当使用注解时,为了减少配制xml的工作量,可以把Employee.xml省略,而把相应配制通过注解的形式写到EmployeeMapper.java的文件中,如下所示
final String getAllEmployees = "SELECT
E.id, name, type, salay, time "+
"FROM employee E "+
"left join register r on
r.eid = E.id "+
"left join time t on t.eid = E.id";
@Select(getAllEmployees)
@TypeDiscriminator(column = "type",
@Case(value="1",type=RegisterEmployee.class,results={
@Result(property="salay")
@Case(value="2",type=TimeEmployee.class,results={
@Result(property="time")
 这样Configuration.xml中就不需要设置&mappers/&了,此时在测试程序时就必须加一行session.getConfiguration().addMapper(EmployeeMapper.class);的代码进行注册,这样在每一次CRUD时都需要添加一行这样的代码。还不如在建立一个空的Employee.xml文件,然后像上面一样设置好namespace,从而不用输入那一行代码。
上面的说明针对的是,仅针对使用mybats动态代理时的情况。写得比较乱,以后有时间再改。
浏览 36484
浏览: 55349 次
来自: 河北
[align=center][/align]MyBatise关于Oracle中UUID主键返回问题 - wang - ITeye博客
博客分类:
在做oracle开发时候经常会遇见主键自增问题,oralce可以了使用序列方式实现主键自增也可以使用uuid方式。
我选择后者,但是今天做项目时候用mybatise想获取插入记录的UUID主键,研究了半天看了官方文档才明白怎么办。
我使用oralce的sys_guid()函数来获取UUID。感觉这种方式对代码侵入少,不用在java中再做处理了。
MyBatise中有一个叫做selectKey的标签,主要是用于获取主键的。
这个标签中主要的属性是
keyProperty selectKey 语句结果应该被设置的目标属性。 Can be a comma separated list of property names if multiple generated columns are expected.resultType 结果的类型。MyBatis 通常可以算出来,但是写上也没有问题。 MyBatis 允许任何简单类型用作主键的类型,包括字符串。order 这可以被设置为 BEFORE 或 AFTER。如果设置为 BEFORE,那 么它会首先选择主键, 设置 keyProperty 然后执行插入语句。 如果 设置为 AFTER,那么先执行插入语句,然后是 selectKey 元素- 这和如 Oracle 数据库相似,可以在插入语句中嵌入序列调用。statementType 和前面的相 同,MyBatis 支持 STA TEMENT ,PREPARED 和 CALLABLE 语句的映射类型,分别代表 PreparedStatement 和 CallableStatement 类型。
其中主要是order这个属性由于我是先利用oralce的函数生成UUID,所以要选择before。
我的配置是这样的
&insert id="insert"
parameterType="com.wangxiaowei.jqueryui.system.vo.TSystemDepartment"&
&selectKey keyProperty="id" resultType="String" order="BEFORE"&
select sys_guid() from dual
&/selectKey&
insert into T_SYSTEM_DEPARTMENT (ID,DEPNAME, SUPERID, SORT, STATE)
values ( #{id,jdbcType=VARCHAR},#{depname,jdbcType=VARCHAR},
#{superid,jdbcType=DECIMAL}, #{sort,jdbcType=DECIMAL},
#{state,jdbcType=DECIMAL})
selectkey中先获取UUID值,通过keyProperty属性告诉mybatise把这个UUID值赋予实体对象的哪个属性。这样生成的insert语句中就已经有UUID的主键值了。
Mybatise会自动在你传入insert方法的参数实体的ID属性的值变成主键值。
public void addDepartment(){
TSystemDepartment systemDepartment = new TSystemDepartment();
systemDepartment.setDepname("部门测试1");
systemDepartment.setSort(1);
systemDepartment.setState(1);
systemDepartment.setSuperid(0);
Integer id = systemDepartmentMapper.insert(systemDepartment);
System.out.println(systemDepartment.getId());
//输出的值就是数据库中生成的UUID值了。NB。
Assert.assertSame(id, 1);
浏览: 55333 次
来自: 天津
不在后台显示错误,只在前台显示400、这怎么办
学习了。好贴
有分支和子流程时估计不行,还有改一些表
不错的思路!学习了mybatis sql in 查询 - fireinjava - ITeye博客
博客分类:
mybatis官方学习文档:
本文转自:http://www.blogjava.net/xmatthew/archive//355879.html
1. 当查询的参数只有一个时
findByIds(List&Long& ids) 1.1 如果参数的类型是List, 则在使用时,collection属性要必须指定为 list
&select id="findByIdsMap" resultMap="BaseResultMap"&
&include refid="Base_Column_List" /&
from jria where ID in
&foreach item="item" index="index" collection="list" open="(" separator="," close=")"&
&/foreach&
findByIds(Long[] ids) 1.2 如果参数的类型是Array,则在使用时,collection属性要必须指定为 array
&select id="findByIdsMap" resultMap="BaseResultMap"&
&include refid="Base_Column_List" /&
from tabs where ID in
&foreach item="item" index="index" collection="array" open="(" separator="," close=")"&
&/foreach&
2. 当查询的参数有多个时,例如 findByIds(String name, Long[] ids) 这种情况需要特别注意,在传参数时,一定要改用Map方式, 这样在collection属性可以指定名称
下面是一个示例
Map&String, Object& params = new HashMap&String, Object&(2);
params.put("name", name);
params.put("ids", ids);
mapper.findByIdsMap(params);
&select id="findByIdsMap" resultMap="BaseResultMap"&
&include refid="Base_Column_List" /&
from tabs where ID in
&foreach item="item" index="index" collection="ids" open="(" separator="," close=")"&
&/foreach&
浏览 109815
我有疑问,关于数组时你说collection="array"& 那调用方法中的ids 去哪了。你有环境的话可以直接试下。上面是较早以前转载的文章,目前来讲上面写的也有错的。比如"如果参数的类型是List, 则在使用时,collection属性要必须指定为 list"这个有问题的。collection="ids"也是可以的
fireinjava
浏览: 310929 次
来自: 福州
LyAn_爱踢爱死 写道我有疑问,关于数组时你说collect ...
我有疑问,关于数组时你说collection=&ar ...
不行!楼主你真的试过吗?

我要回帖

更多关于 火星情报局第三季链接 的文章

 

随机推荐