【Mybatis】从安装到简单demo

版权声明: https://blog.csdn.net/qq_35315154/article/details/84973059

一、Mybatis是什么?

是一个持久层的框架,学习成本较低,使用sql语言。

二、Mybatis导入jar包与配置文件

2.1.1导入jar包

需要mybatis的一系列jar包,jdbc  jar包,mysql jar包。

额外的,非必要的是log4j.jar

2.2.1配置文件

1.映射配置文件

<?xml version="1.0" encoding="UTF-8" ?>
<!-- 注意这个配置头标签,不要配错了 -->
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
	
	<environments default="development">
		<environment id="development">
			<!-- 使用jdbc事务管理 -->
			<transactionManager type="JDBC" />
			<!-- 数据库连接池 -->
			<dataSource type="POOLED">
				<property name="driver" value="com.mysql.jdbc.Driver" />
				<property name="url"
					value="jdbc:mysql://localhost:3306/test?characterEncoding=utf-8" />
				<property name="username" value="root" />
				<property name="password" value="a" />
			</dataSource>
		</environment>
	</environments>

<!-- 这个地方配置实体类sql映射文件 -->
	<mappers>
	<mapper resource="MapConfig\UserMapper.xml"/>
	
	</mappers>
</configuration>

2.配置实体类的sql映射文件

<?xml version="1.0" encoding="UTF-8" ?>
<!-- 注意不要弄错了,配置文件是config,这个是映射mapper -->
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!-- 加上命名空间,可以起到隔离作用 -->
<mapper namespace="UserMapper">
<!-- id作为sql的一个唯一标示,parameterType是入参类型。框架会自动填充对象中的属性到sql语句中。实体类属性应与数据库中字段名相同。也可以有更高级的做法。这里先说简单的demo -->
<insert id="addUser" parameterType="com.test.domain.User">

insert into User (id,username) values (#{id},#{username})
</insert>

<update id="updateUser" parameterType="com.test.domain.User" >
update  user set username = #{username} where id =#{id}

</update>

<delete id="deleteUser" parameterType="Integer">
delete from user where id = #{id}
</delete>
<!-- resultType是返回值类型 -->
<select id="selectUser" parameterType="Integer" resultType="com.test.domain.User">
select id, username from user where id = #{id}
</select>

<select id="selectLikeUser" parameterType="String" resultType="com.test.domain.User">
select id, username from user where username like '%${value}%'
</select>

<select id="selectAllUser"  resultType="com.test.domain.User">
select id, username from user 
</select>




</mapper>

三、Mybatisdemo完成

1.实体类

package com.test.domain;

public class User {
private int id;
private String username;

private String password;

public String getPassword() {
	return password;
}
public void setPassword(String Password) {
	this.password = Password;
}

public int getId() {
	return id;
}
public void setId(int id) {
	this.id = id;
}
public String getUsername() {
	return username;
}
public void setUsername(String username) {
	this.username = username;
}
@Override
public String toString() {
	return "User [id=" + id + ", username=" + username + "]";
}
public User(int id, String username) {
	super();
	this.id = id;
	this.username = username;
}
public User() {
	super();
}

}

2.测试类

package com.test.dao;

import java.io.IOException;
import java.util.List;

import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.Test;

import com.test.domain.User;

public class UserDao {
	
	
	
	@Test
	public void addUser() throws Exception {
		SqlSessionFactoryBuilder sessionFactory = new SqlSessionFactoryBuilder();
		SqlSessionFactory sqlSessionFactory = sessionFactory.build(Resources.getResourceAsStream("sqlMapConfig.xml"));
		SqlSession sqlSession = sqlSessionFactory.openSession();
		User user = new User(2,"zs");
		sqlSession.insert("UserMapper.addUser", user);
		sqlSession.commit();
		sqlSession.close();	
	}
	@Test
	public void deleteUser() throws IOException {
		SqlSessionFactoryBuilder sessionFactory = new SqlSessionFactoryBuilder();
		SqlSessionFactory sqlSessionFactory = sessionFactory.build(Resources.getResourceAsStream("sqlMapConfig.xml"));
		SqlSession session = sqlSessionFactory.openSession();
		session.delete("UserMapper.deleteUser", 1);
		session.commit();
		session.close();
	}
	@Test
	public void updateUser() throws IOException {
		SqlSessionFactoryBuilder sessionFactory = new SqlSessionFactoryBuilder();
		SqlSessionFactory sqlSessionFactory = sessionFactory.build(Resources.getResourceAsStream("sqlMapConfig.xml"));
		SqlSession session = sqlSessionFactory.openSession();
		User user = new User(1,"zs1");
		session.update("UserMapper.updateUser", user);
		//session.delete("UserMapper.deleteUser", 1);
		
		
		
		session.commit();
		session.close();
	}
	@Test
	public void selectUser() throws IOException {
		SqlSessionFactoryBuilder sessionFactory = new SqlSessionFactoryBuilder();
		SqlSessionFactory sqlSessionFactory = sessionFactory.build(Resources.getResourceAsStream("sqlMapConfig.xml"));
		SqlSession session = sqlSessionFactory.openSession();
		
		//session.update("UserMapper.updateUser", user);
		//session.delete("UserMapper.deleteUser", 1);
		Object user1 =  session.selectOne("UserMapper.selectUser", 1);
		System.out.println(user1);
		
		session.commit();
		session.close();
	}
	@Test
	public void selectAllUser() throws IOException {
		SqlSessionFactoryBuilder sessionFactory = new SqlSessionFactoryBuilder();
		SqlSessionFactory sqlSessionFactory = sessionFactory.build(Resources.getResourceAsStream("sqlMapConfig.xml"));
		SqlSession session = sqlSessionFactory.openSession();
		
		//session.update("UserMapper.updateUser", user);
		//session.delete("UserMapper.deleteUser", 1);
		List<User> userList =  session.selectList("UserMapper.selectAllUser");
		for (User user : userList) {
			System.out.println(user);
		}
		
		session.commit();
		session.close();
	}
	
	@Test
	public void selectLikeUser() throws IOException {
		SqlSessionFactoryBuilder sessionFactory = new SqlSessionFactoryBuilder();
		SqlSessionFactory sqlSessionFactory = sessionFactory.build(Resources.getResourceAsStream("sqlMapConfig.xml"));
		SqlSession session = sqlSessionFactory.openSession();
		
		//session.update("UserMapper.updateUser", user);
		//session.delete("UserMapper.deleteUser", 1);
		List<User> userList =  session.selectList("UserMapper.selectLikeUser","z");
		for (User user : userList) {
			System.out.println(user);
		}
		
		session.commit();
		session.close();
	}
}

四、编写demo中遇到的问题及解决方法

下面都是:序号+解决方法+遇到的问题报错

1.正确配置xml的文件头。配置头中主要的不同部分是config和Mapper

 Mapped Statements collection does not contain value for UserMapper.addUser

并且还要在配置文件中包含映射文件。

2.添加数据库中已存在的信息。(表中有主键,如ID为1,再添加ID为1的记录)

com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: Duplicate entry '1' for key 'PRIMARY'

3.把ResultType误写成ResultMap。ResultType是直接自动映射类的属性和表的字段,需要同名。ResultMap是一种手动配置类的属性和表字段的映射。

Mapped Statements collection does not contain value for UserMapper.selectLikeUser

猜你喜欢

转载自blog.csdn.net/qq_35315154/article/details/84973059
今日推荐