Mybatis 01
一、在pom.xml中配置mybatis:
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.4.6</version>
</dependency>
二、在pom.xml中配置mysql驱动:
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.6</version> <!--由于数据库版本的问题,用5.1.6不会报错 -->
</dependency>
三、在java下面的pojo包里面写User.java,并生成getter、setter方法:
public class User {
private int Uid;
private String Uname;
private String Upassword;
private String Uphone;
@Override
public String toString() {
return "User{" +
"Uid=" + Uid +
", Uname='" + Uname + '\'' +
", Upassword='" + Upassword + '\'' +
", Uphone='" + Uphone + '\'' +
'}';
}
public int getUid() {
return Uid;
}
public void setUid(int uid) {
Uid = uid;
}
public String getUname() {
return Uname;
}
public void setUname(String uname) {
Uname = uname;
}
public String getUpassword() {
return Upassword;
}
public void setUpassword(String upassword) {
Upassword = upassword;
}
public String getUphone() {
return Uphone;
}
public void setUphone(String uphone) {
Uphone = uphone;
}
}
四、在resources下面写sqlMapConfig.xml:
<?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>
<!--引入外部文件的标签 -->
<properties resource="properties/db.properties"></properties>
<settings>
<!-- 可以在控制台输出日志信息:sql语句和参数 -->
<setting name="logImpl" value="STDOUT_LOGGING"/>
</settings>
<!-- 表示类型别名 库-->
<typeAliases>
<!-- 每一个类型的别名 type属性表示别名对应的类型地址 alias表示起的别名-->
<typeAlias type="java.util.List" alias="list"/>
<!-- package表示包,利用包的形式进行扫描包之下的所有的类,别名就是当前类名 -->
<package name="pojo"/>
</typeAliases>
<!-- 分页插件 -->
<!-- <plugins>
<plugin interceptor="com.github.pagehelper.PageInterceptor"> 3.3.0版本可用 - 分页参数合理化,默认false禁用
pageNum表示当前页 pages表示尾页
true启用合理化时,如果pageNum<1会查询第一页,如果pageNum>pages会查询最后一页 false禁用合理化时,如果pageNum<1或pageNum>pages会返回空数据
<property name="reasonable" value="true"/>
</plugin>
</plugins>
-->
<!-- 环境配置 作为连接数据库的环境 -->
<environments default="mysql">
<environment id="mysql">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="${jdbc.driver}"/>
<property name="url" value="${jdbc.url}"/>
<property name="username" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
</dataSource>
</environment>
</environments>
<!-- mappers表示代理模式扫描 ,目的主要是在当前配置文件中扫描到sql映射文件-->
<!--核心配置文件 关联 映射文件 -->
<mappers>
<mapper resource="mapper/UserMapper.xml"/>
</mappers>
</configuration>
五、在resources建立一个properties文件夹,写db.properties:
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/test2?useSSL=true&useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull
jdbc.username=root
jdbc.password=123456
六、在resources建立一个mapper文件夹,写映射文件UserMapper.xml:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!--代理扫描 namespace属性表示当前代理的命名空间,
该映射文件就是接口的实现类 ,namespace中的属性值就是接口的路径名 -->
<mapper namespace="mapper.IUserDao">
<!--一个标签 对应 实现接口中的一个抽象方法 ,id即是对应的方法名
parameterType 参数类型
resultType 返回值类型
-->
<!--查-->
<select id="selectUsers" resultType="user">
select * from user_info
</select>
<!--增-->
<insert id="addUser" parameterType="user">
insert into user_info VALUES (NULL ,#{Uname},#{Upassword},#{Uphone})
</insert>
<!--删-->
<delete id="deleteUser" parameterType="int"> <!--以id为条件-->
DELETE from user_info where Uid=#{id}
</delete>
<delete id="deleteUser1" parameterType="user"> <!--以User类的Uname属性为条件-->
DELETE from user_info where Uname=#{Uname}
</delete>
<!--改-->
<update id="updateUer" parameterType="user">
UPDATE user_info SET Uname=#{Uname} where Uid=#{Uid}
</update>
</mapper>
七、在java包下建立一个mapper包,里面写接口IUserDao.java:
public interface IUserDao {
//查
public List<User> selectUsers();
//增
public int addUser(User user);
//以id为条件
public int deleteUser(int id);
//以User类的Uname属性为条件
public int deleteUser1(User user);
//改
public int updateUer(User user);
}
八、新建一个文件夹test和java、resources同级,并设置为Test Source Root,里面写测试类,可直接用Junit里面的@Test、@After、@Before来写测试类:
public class Test1 {
SqlSession sqlSession;
@Before
public void init(){
try {
//读取核心配置文件sqlMapConfig.xml
InputStream inputStream = Resources.getResourceAsStream("sqlMapConfig.xml");
//找一个盖工厂的建筑师
SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
//构建工厂
SqlSessionFactory build = builder.build(inputStream);
//工厂生产sqlSession对象
sqlSession = build.openSession();
} catch (IOException e) {
e.printStackTrace();
}
}
@Test
//查
public void select(){
//sqlSession对象代理增删查改
List<User> users = sqlSession.getMapper(IUserDao.class).selectUsers();
System.out.println(users);
}
//增
@Test
public void add(){
User user = new User();
user.setUname("天天");
user.setUpassword("123456");
user.setUphone("1047896512");
//sqlSession对象代理增删查改
int i = sqlSession.getMapper(IUserDao.class).addUser(user);
System.out.println(i);
}
//改
@Test
public void update(){
User user = new User();
user.setUname("图图");
user.setUid(2);
//sqlSession对象代理增删查改
int i = sqlSession.getMapper(IUserDao.class).updateUer(user);
}
//删
@Test
public void delete(){
//以id为条件
int i = sqlSession.getMapper(IUserDao.class).deleteUser(8); //sqlSession对象代理增删查改
//以User类的Uname属性为条件
System.out.println(i);
User user = new User();
user.setUname("maomao");
//sqlSession对象代理增删查改
int i1 = sqlSession.getMapper(IUserDao.class).deleteUser1(user);
System.out.println(i1);
}
@After
public void destroy(){
try {
sqlSession.commit();
}catch (Exception e){
sqlSession.rollback();
}finally {
sqlSession.close();
}
}
}