Mybatis学习总结三之简化sql映射xml文件中的引用及解决字段名与实体类属性名不相同的冲突

一、为实体类定义别名,简化sql映射xml文件中的引用

我们在sql映射xml文件中的引用实体类时,需要写上实体类的全类名(包名+类名),如下:parameterType="com.aiit.pojo.User"这里写的实体类User的全类名com.aiit.pojo.User,

<insert id="insertOne" parameterType="com.aiit.pojo.User"  >
		INSERT INTO tbl_user(tbl_user.name,tbl_user.age,tbl_user.address,tbl_user.birth) 
		VALUES(#{name},#{age},#{address},#{birth})
	</insert>
 

每次都写这么一长串内容挺麻烦的,现在我们把它简化一下,如:

<insert id="insertOne" parameterType="user"  >
		INSERT INTO tbl_user(tbl_user.name,tbl_user.age,tbl_user.address,tbl_user.birth) 
		VALUES(#{name},#{age},#{address},#{birth})
	</insert>
 

parameterType="user"简化成这样,我们需要在主配置文件mybatis.xml文件中为实体类="com.aiit.pojo.User"定义一个别名为"user",具体做法如下:
  在mybatis.xml文件中<configuration></configuration>标签中添加如下配置:

特别注意要放在<configuration></configuration>标签中,<environments></environments>上面

   <typeAliases>
		<typeAlias type="com.aiit.pojo.User" alias="user" />
    </typeAliases>   

这样就可以为com.aiit.pojo.User类定义了一个别名为user,以后user就代表了com.aiit.pojo.User类,这样sql映射xml文件中的凡是需要引用com.aiit.pojo.User类的地方都可以使用user来代替,这就达到了一个简化实体类引用的目的。

另一种方法:  <package name="com.aiit.pojo.User"/>就表示为这个包下面的所有实体类设置别名。MyBatis默认的设置别名的方式就是去除类所在的包后的简单的类名,比如com.aiit.pojo.User这个实体类的别名就会被设置成User。


    <typeAliases>
      <!--只有包名-->
        <package name="com.aiit.pojo"/>
    </typeAliases>
<!--只需写类名-->
       <insert id="insertOne" parameterType="User"  >
		INSERT INTO tbl_user(tbl_user.name,tbl_user.age,tbl_user.address,tbl_user.birth) 
		VALUES(#{name},#{age},#{address},#{birth})
	</insert>
 

二、解决字段名与实体类属性名不相同的冲突

我们平时写项目时经常会遇到数据库表中的字段名和表对应实体类的属性名称不一定完全相同。下面我们来演示怎么解决这个问题。

解决方法:我们在写数据库操作语言时,给表中的字段名起个别名和实体类的属性名一致就行了

1.定义实体类

package com.aiit.pojo;

import java.util.Date;

public class User {

	private int id;         //数据库对应的字段名user_id
	private String name;    //数据库对应的字段名user_name
	private int age;        //数据库对应的字段名user_age
	private String address; //数据库对应的字段名address
	private Date birth;     //数据库对应的字段名birth
	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;
	}
	public String getAddress() {
		return address;
	}
	public void setAddress(String address) {
		this.address = address;
	}
	public Date getBirth() {
		return birth;
	}
	public void setBirth(Date birth) {
		this.birth = birth;
	}
	public User(int id, String name, int age) {
		super();
		this.id = id;
		this.name = name;
		this.age = age;
	}
	public User() {
		super();
	}
	public User(int id, String name, int age, String address, Date birth) {
		super();
		this.id = id;
		this.name = name;
		this.age = age;
		this.address = address;
		this.birth = birth;
	}

	@Override
	public String toString() {
		return "User [id=" + id + ", name=" + name + ", age=" + age + ", address=" + address + ", birth=" + birth + "]";
	}

}

2.实体映射文件配置UserMapper.xml
      我们将查询的字段名都起一个和实体类属性名相同的别名,这样实体类的属性名和查询结果中的字段名就可以一一对应上

<select id="selectOne" parameterType="int" resultType="com.aiit.pojo.User">
		SELECT user_id id,user_name id,user_age age FROM tbl_user WHERE id=#{id}
</select>

猜你喜欢

转载自blog.csdn.net/qq_38720976/article/details/84575120