1. 程式人生 > >mybatis的傳統的增,刪,改,查實現

mybatis的傳統的增,刪,改,查實現

3.2.1、儲存使用者

<insert id="saveUser" parameterType="com.atguigu.mybatis.pojo.User">
	insert into t_user(`last_name`,`sex`) values(#{lastName},#{sex})
</insert>

3.2.2、更新使用者

<update id="updateUser" parameterType="com.atguigu.mybatis.pojo.User">
	update t_user set last_name = #{lastName} , sex = #{sex} where id = #{id}
</update>

3.2.3、根據id刪除使用者

<delete id="deleteUserById" parameterType="int">
	delete from t_user where id = #{id}
</delete>

3.2.4、根據id搜尋使用者 <!– select標籤可以用來配置(定義)一個select語句 id 屬性是給 sql語句定義一個唯一的標識(stamtentID) resultType屬性是這個查詢語句返回的資料型別

	#{引數名/屬性名}
 -->
<select id="queryUserById" parameterType="int" resultType="com.atguigu.mybatis.pojo.User">
	select id,last_name lastName,sex from t_user where id = #{id}
</select>

3.2.5、搜尋全部使用者

<select id="queryUsers" resultType="com.atguigu.mybatis.pojo.User">
	select id,last_name lastName,sex from t_user
</select>

3.3、實現UserDao介面 public interface UserDao {

public User queryUserById(int id);

public List<User> queryUsers();

public int saveUser(User user);

public int updateUser(User user);

public int deleteUserById(int id);

}

UserDaoImpl的實現

public class UserDaoImpl implements UserDao {

private SqlSessionFactory sqlSessionFactory;

public UserDaoImpl(SqlSessionFactory sqlSessionFactory) {
	super();
	this.sqlSessionFactory = sqlSessionFactory;
}

public UserDaoImpl() {
	super();
	// TODO Auto-generated constructor stub
}

public SqlSessionFactory getSqlSessionFactory() {
	return sqlSessionFactory;
}

public void setSqlSessionFactory(SqlSessionFactory sqlSessionFactory) {
	this.sqlSessionFactory = sqlSessionFactory;
}

@Override
public User queryUserById(int id) {
	SqlSession session = sqlSessionFactory.openSession();
	try {
		return session.selectOne("com.atguigu.mybatis.pojo.User.queryUserById", id);
	} finally {
		session.close();
	}
}

@Override
public List<User> queryUsers() {
	SqlSession session = sqlSessionFactory.openSession();
	try {
		return session.selectList("com.atguigu.mybatis.pojo.User.queryUsers");
	} finally {
		session.close();
	}
}

@Override
public int saveUser(User user) {
	SqlSession session = sqlSessionFactory.openSession();
	try {
		int updateCount = session.insert("com.atguigu.mybatis.pojo.User.saveUser", user);
		session.commit();
		return updateCount;
	} finally {
		session.close();
	}
}

@Override
public int updateUser(User user) {
	SqlSession session = sqlSessionFactory.openSession();
	try {
		int updateCount = session.update("com.atguigu.mybatis.pojo.User.updateUser", user);
		session.commit();
		return updateCount;
	} finally {
		session.close();
	}
}

@Override
public int deleteUserById(int id) {
	SqlSession session = sqlSessionFactory.openSession();
	try {
		int updateCount = session.delete("com.atguigu.mybatis.pojo.User.deleteUserById", id);
		session.commit();
		return updateCount;
	} finally {
		session.close();
	}
}

}

3.4、編寫UserDao測試 public class UserDaoTest {

private static SqlSessionFactory sqlSessionFactory;
private static UserDao userDao;

@BeforeClass
public static void setUpBeforeClass() throws Exception {
	sqlSessionFactory = new SqlSessionFactoryBuilder().build(Resources
			.getResourceAsStream("mybatis-config.xml"));
	userDao = new UserDaoImpl(sqlSessionFactory);
}

@Test
public void testQueryUserById() {
	System.out.println(userDao.queryUserById(2));
}

@Test
public void testQueryUsers() {
	System.out.println(userDao.queryUsers());
}

@Test
public void testSaveUser() {
	User user = new User(0, "admin168", 1);
	System.out.println(userDao.saveUser(user));
	System.out.println( user );
}

@Test
public void testUpdateUser() {
	System.out.println(userDao.updateUser(new User(2, "國哥很帥!", 0)));
}

@Test
public void testDeleteUserById() {
	System.out.println( userDao.deleteUserById(2) );
}

}

3.5、插入記錄並返回主鍵

<insert id="saveUser" parameterType="com.atguigu.mybatis.pojo.User" useGeneratedKeys="true" keyProperty="id">
	insert into t_user(`last_name`,`sex`) values(#{lastName},#{sex})
</insert>

3.6、 標籤的使用 SELECT LAST_INSERT_ID()

MySql資料庫下使用<selectKey標籤

<insert id="saveUser" parameterType="com.atguigu.mybatis.pojo.User">
	<!-- 
		selectKey標籤專門用來在執行sql語句【之前或之後】執行一些查詢操作。
			order屬性設定selectKey中的語句執行的順序
				BEFORE	表示執行sql語句之前先執行selectkey中的語句
				AFTER	表示先執行sql語句之後,再執行selectKey中的語句
			keyProperty="id" 告訴mybatis查詢回來的主鍵設定到哪個屬性中
			resultType="int" 告訴mybatis查詢返回的資料型別
	 -->
	<selectKey order="AFTER" keyProperty="id" resultType="int">
		select last_insert_id()
	</selectKey>
	insert into t_user(`last_name`,`sex`) values(#{lastName},#{sex})
</insert>

selectKey 返回Oracle的序列自增主鍵 select 序列名.nextval as id from dual