1. 程式人生 > >mybatis 逆向工程 自動生成的mapper檔案沒有 主鍵方法(附解決方法)

mybatis 逆向工程 自動生成的mapper檔案沒有 主鍵方法(附解決方法)

總結了一下網上的三大原因

1.資料表沒有設定主鍵

    設定個主鍵就好

2.在mybits配置文件裡設定了某些屬性值為false

   在mybatis配置文件裡檢視

   enableSelectByPrimaryKey="true"

  enableUpdateByPrimaryKey="true"

  enableDeleteByPrimaryKey="true"

這些屬性是否設定為false,如果設定了這些屬性,改為true即可,如果沒有設定這些屬性,其預設值就是true,那就不用管它了

3。mysql-connector-java 驅動版本用的是6.x的

據說用mysql5.x版本的才能生成主鍵方法,用了6.x的就不行了,但問題是

5.x版本的驅動路徑是:com.mysql.jdbc.Driver

6.x的驅動路徑是:com.mysql.cj.jdbc.Driver

自己開啟jar包找下Driver就知道了。

我的電腦本地上裝的是mysql server 5.5,其driver路徑是com.mysql.cj.jdbc.Driver,我不太清楚mysql server 與mysql-connector-java版本的對應關係

懶得改本地的sql版本,所以就只能用mysql-connector-java 6.x的版本了,

那 主鍵方法怎麼辦呢?

自己動手,豐衣足食啊!

我以 新增 按主鍵刪除 為例

1.自己手動先在xxxMapper.java中寫入其方法名,引數為 主鍵的名字

package cn.ssm.dao;

import cn.ssm.bean.User;
import cn.ssm.bean.UserExample;
import java.util.List;
import org.apache.ibatis.annotations.Param;

public interface UserMapper {
    long countByExample(UserExample example);

    int deleteByExample(UserExample example);
    
    //按主鍵刪除。
    int deleteByPrimaryKey(Integer uId);

    int insert(User record);

    int insertSelective(User record);

    List<User> selectByExample(UserExample example);

    int updateByExampleSelective(@Param("record") User record, @Param("example") UserExample example);

    int updateByExample(@Param("record") User record, @Param("example") UserExample example);
}

2.然後開啟xxxMapper.xml

	<delete id="deleteByExample"
		parameterType="cn.ssm.bean.UserExample">
		delete from users
		<if test="_parameter != null">
			<include refid="Example_Where_Clause" />
		</if>
	</delete>

<!-- 以下為 所加 程式碼-->
	<delete id="deleteByPrimaryKey" parameterType="java.lang.Integer">
		delete from users
		where u_id = #{uId,jdbcType=INTEGER}
	</delete>

id 為方法名,parameterType為主鍵的屬性,(我的主鍵為int型別的)

在<delete></delete>標籤中 填入正確的sql語句

delete from users where u_id = #{uId,jdbcType=INTEGER}

{} 裡面,第一個值為主鍵名字,jdbcTYPE為主鍵屬性

3.測試 deleteByPrimaryKey 方法

	@Autowired
	UserMapper um;

    /*
	 * 根據主鍵 刪除資訊
	 */
	@Test
	public void testDelete() {
		um.deleteByPrimaryKey(1006);
	}

我的到此為止就成功了,看你的了