如何在mapper中order by 加if

如何在mapper中order by 加if,第1张

二者在一起写,,这种是最常用的。 这个取决于数据库中,该字段的约束。否则会报错。 1. 如果为NOT NULL,那么mapper.xml中必须要验证; 2. 如果为非空字符串,则mapper.xml中必须要验证。

如何开发自己的通用Mapper

HsqldbMapper实例

第一步,创建HsqldbMapper<T>

public interface HsqldbMapper<T>{

}

这个接口就是我们定义的通用Mapper,具体的接口方法在**第三步**写。其他的Mapper可以继承这个HsqldbMapper<T>。

第二部,创建HsqldbProvider

public class HsqldbProvider extends MapperTemplate {

//继承父类的方法

public HsqldbProvider(Class<?>mapperClass, MapperHelper mapperHelper) {

super(mapperClass, mapperHelper);

}

}

这个类是实际处理 *** 作的类,需要继承MapperTemplate,具体代码在**第四步**写。

第三步,在HsqldbMapper<T>中添加通用方法

这里以一个分页查询作为例子。 public interface HsqldbMapper { /** * 单表分页查询 * * @param object * @param offset * @param limit * @return */

@SelectProvider(type=HsqldbProvider.class,method = "dynamicSQL") List

selectPage(@Param("entity") T object, @Param("offset") int offset,

@Param("limit") int limit); }

返回结果为List,入参分别为查询条件和分页参数。在Mapper的接口方法中,当有多个入参的时候建议增加@Param注解,否则就得用param1,param2…来引用参数。

我们知道在Mybatis中定义Mapper信息有两种方式,一种是利用xml写一个对应的包含Mapper信息的配置文件;另一种就是定义一个Mapper接口,然后定义一些相应的 *** 作方法,再辅以相应的 *** 作注解。

现假设我有这样一个实体类:

Java代码 收藏代码

package com.tiantian.mybatis.model

public class User {

private int id

private String name

private int age

public int getId() {

return id

}

public void setId(int id) {

this.id = id

}

public String getName() {

return name

}

public void setName(String name) {

this.name = name

}

public int getAge() {

return age

}

public void setAge(int age) {

this.age = age

}

}

它对应的数据库表结构是这样的:

然后我要利用Mybatis对它做一个简单的增删改查 *** 作,那么如果利用xml配置Mapper的方式来定义的话,我对应的UserMapper.xml文件会是这样:

Xml代码 收藏代码

<?xml version="1.0" encoding="UTF-8" ?>

<!DOCTYPE mapper

PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"

"http://mybatis.org/dtd/mybatis-3-mapper.dtd">

<mapper namespace="com.tiantian.mybatis.mapper.UserMapper">

<insert id="insertUser" parameterType="User" useGeneratedKeys="true" keyColumn="id">

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

</insert>

<update id="updateUser" parameterType="User">

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

</update>

<select id="findById" parameterType="int" resultType="User">

select * from t_user where id=#{id}

</select>

<delete id="deleteUser" parameterType="int">

delete from t_user where id=#{id}

</delete>

</mapper>

如果使用接口加注解的方式,那么我们的UserMapper接口应该这样定义:

Java代码 收藏代码

package com.tiantian.mybatis.mapperinterface

import org.apache.ibatis.annotations.Delete

import or www.hbbz08.com g.apac he.ibatis.annotations.Insert

import org.apache.ibatis.annotations.Select

import org.apache.ibatis.annotations.Update

import com.tiantian.mybatis.model.User

public interface UserMapper {

@Insert("insert into t_user(name, age) values(#{name}, #{age})")

public void insertUser(User user)

@Update("update t_user set name=#{name}, age=#{age} where id=#{id}")

public void updateUser(User user)

@Select("select * from t_user where id=#{id}")

public User findById(int id)

@Delete("delete from t_user where id=#{id}")

public void deleteUser(int id)

}

注意看这里我故意把UserMapper接口的namespace也就是它的包名置为与UserMapper.xml的namespace属性不一样。这主要是为了要更好的讲以下的内容。

接下来要做的就是把Mapper信息注册到Mybatis的配置中,告诉Mybatis我们定义了哪些Mapper信息。这主要是在Mybatis的配置文件中通过mappers元素来进行的。在以前版本的Mybatis中我们在Mybatis的配置文件中需要这样定义Mapper信息资源的位置。

Xml代码 收藏代码

<mappers>

<mapper resource="com/tiantian/mybatis/mapper/UserMapper1.xml"/>

<mapper url="file:///E:/UserMapper.xml"/>

</mappers>

这主要是通过mapper元素的resource和url属性来指定的,resource属性指定的是相对于跟类路径下的资源,url属性指定的是通过URL可以获取到的资源。这有一点不好的地方,当我们使用Mapper接口加注解来定义当前Mapper的 *** 作信息时,我们还需要定义一个与它对应的Mapper.xml文件。如:

Xml代码 收藏代码

<?xml version="1.0" encoding="UTF-8" ?>

<!DOCTYPE mapper

PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"

"http://mybatis.org/dtd/mybatis-3-mapper.dtd">

<mapper namespace="com.tiantian.mybatis.mapperinterface.UserMapper">

</mapper>


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/bake/11723512.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-18
下一篇 2023-05-18

发表评论

登录后才能评论

评论列表(0条)

保存