public class MySqlProvider{
public String mysql01(Student student){
if (student.getAge() == null){
return "select * from student";
}else{
return "select * from user where age > #{age}";
}
}
}
模糊查询
public String mysql01(Student student){
if (student.getName() != null){
return "select * from student where name like '%' #{name} '%'";
}else{
return "select * from student";
}
}
// 模糊查询
@SelectProvider(type = MySqlUtils.class, method = "selectByName")
List<Student> selectByName(@Param("name") String name);
// 当 传来的 是单个参数 或 多个参数时, 可以用map接收
public String selectByName(Map map){
if (map.get("name") != null && map.get("name") != ""){
return "select * from student where sname like '%' #{name} '%'";
}else{
return "select * from student";
}
}
// 添加数据 动态sql
@UpdateProvider(type = MySqlUtils.class, method = "studentUpdate")
void studentUpdate(Student student);
// 修改数据 动态sql
public String studentUpdate(Student student){
StringBuffer sql = new StringBuffer();
sql.append("update student set sno = #{sno}"); // 这里设置sno = #{sno}是为了更好的拼接sql语句, 不影响最后结果
if (student.getSname() != "" && student.getSname() != null){
sql.append(", sname = #{sname}");
}
if (student.getGender() != "" && student.getGender() != null){
sql.append(", gender = #{gender}");
}
if (student.getSage() > 0){
sql.append(", sage = #{sage}");
}
sql.append(" where sno = #{sno}");
return sql.toString();
}
public String getUpdateSql03(Student student){
// mybatis提供好的sql类
// new SQL()表示创建一个SQL类的对象
// new SQL(){}表示创建一个SQL类的子类对象, 只不过这个子类叫什么名字 不知道, 没有指定
// 这种写法叫做 匿名内部类
String sql = new SQL(){
{
this.UPDATE("student");
this.SET("id = #{id}");
if (student.getName != null && student.getName != ""){
this.SET("name = #{name}");
}
if (student.getAge > 0){
this.SET("age = #{age}");
}
if (student.getScore > 0){
this.SET("score = #{score}");
}
this.SET("where id = #{id}");
}
}.toString();
return sql;
}
模糊查询 动态sql的另外一种方式
// 模糊查询 的另一种方式
@Test
public void test03(){
StudentDao dao = session.getMapper(StudentDao.class);
List<Student> students = dao.selectByName01("二");
for (Student student : students){
System.out.println(student);
}
}
// 模糊查询的另一种方式
@SelectProvider(type = MySqlUtils.class, method = "selectByName01") // 这里的selcetByName是 类MySqlUtils中的方法名.
List<Student> selectByName01(@Param("name") String name);
// 动态sql的另外一种方式
public String selectByName01(Map map){
final String name = (String) map.get("name");
String sql = new SQL(){
{
this.SELECT("*");
this.FROM("student");
if (name != null && name != ""){
this.WHERE("sname like '%' #{name} '%'"); // % 和#{name}之间的空格不能少
}
}
}.toString();
return sql;
}