简介
Mybatis半自动化的orm框架,工作在持久层,与dao层相关
SSH和SSM之间有什么异同?(面试官会问)
Mybatis是半自动的,程序员可以操作sql语句。在持久层框架而言,优化数据库放方便
Hibernate是全自动的
入门程序
① 导入jar包
② 设置全局配置文件(xml文件)
解决configuration没有提示
- 复制路径
3.
4.
5.添加
全局配置文件SqlMapper.xml
局部配置文件UserMapper.xml
Test
package com.mb.test;
import java.io.IOException;
import java.io.InputStream;
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.model.User;
public class TestFirst {
@Test
public void test() {
InputStream stream = null;
//1.加载全局配置文件
try {
stream = Resources.getResourceAsStream("SqlMapper.xml");
} catch (IOException e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
}
//生成SqlSessionFactory工厂
SqlSessionFactory sf = new SqlSessionFactoryBuilder().build(stream);
//生成session对象
SqlSession session = sf.openSession();
//查找全部
// List<User> selectList = session.selectList("userMapper.selectAll");
// for(User user:selectList) {
// System.out.println(user);
// }
//根据id查找
// User user = session.selectOne("userMapper.selectById",1);
// System.out.println(user);
//插入测试
// User user = new User();
// user.setsName("man");
// user.setSsex("男");
// user.setSage(18);
// session.insert("userMapper.insert",user);
// session.commit();
// System.out.println(user);
// session.close();
//删除测试
// User user = session.selectOne("userMapper.delete", 16);
// session.commit();
// System.out.println(user);
// session.close();
//更新测试
// User user = session.selectOne("userMapper.selectById",1);
// user.setSage(2);
// session.update("userMapper.update",user);
// session.commit();
// System.out.println(user);
// session.close();
//模糊查询
//#{}相当于占位符
//${}连接符 根据某列排序
// List<User> userList=session.selectList("userMapper.selectLike", "红");
// for(User user:userList) {
// System.out.println(user);
// }
// session.commit();
// session.close();
//插入
// User user = new User();
// user.setsName("man");
// user.setSsex("男");
// user.setSage(18);
// int insert = session.insert("userMapper.insertObj",user);
// session.commit();
// System.out.println(user.getsId());
// session.close();
}
}
User
package com.model;
public class User {
public int sId;
public String sName;
public String sSex;
public int sAge;
public int getsId() {
return sId;
}
public void setsID(int sID) {
this.sId = sID;
}
public String getsName() {
return sName;
}
public void setsName(String sName) {
this.sName = sName;
}
public String getSsex() {
return sSex;
}
public void setSsex(String ssex) {
this.sSex = ssex;
}
public int getSage() {
return sAge;
}
public void setSage(int sage) {
this.sAge = sage;
}
@Override
public String toString() {
return "User [sID=" + sId + ", sName=" + sName + ", ssex=" + sSex + ", sage=" + sAge + "]";
}
}
SqlMapper.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>
<environments default="development">
<environment id="development">
<!--配置JDBC事务控制,由mybatis进行管理 -->
<transactionManager type="JDBC"></transactionManager>
<!--配置数据源,采用mybatis连接池 -->
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver" />
<property name="url" value="jdbc:mysql://localhost:3306/test" />
<property name="username" value="root" />
<property name="password" value="root" />
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="UserMapper.xml"></mapper>
</mappers>
</configuration>
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">
<!--resultType:指定sql输出结果的所映射的java对象类型 -->
<mapper namespace="userMapper">
<!--查找全部 -->
<select id="selectAll" resultType="com.model.User">
select * from student
</select>
<!-- 根据id查找 -->
<!-- parameterType="int" 待传入的参数类型 -->
<select id="selectById" parameterType="int" resultType="com.model.User">
select * from student where sId =#{id}
</select>
<!--插入 -->
<!--占位符由#{}代替?;
传入的是简单类型#{}里面的名称可以任意;
传入的对象类型#{}里的名称必定是javabean里的属性
-->
<insert id="insert" parameterType="com.model.User" keyProperty="sId" useGeneratedKeys="true">
insert into student(sName,sSex,sAge)values(#{sName},#{sSex},#{sAge});
</insert>
<!-- 更新 -->
<update id="update" parameterType="com.model.User">
update student set sAge = #{sAge} where sId = #{sId}
</update>
<!-- 删除 -->
<delete id="delete" parameterType="int" >
delete from student where sId=#{id}
</delete>
<!-- 模糊查询 -->
<!-- '%${value}'用#{}也可以,但是test里面要加上% -->
<!--#{}?占位符
${} 连接符 模糊查询 用到的方面:排序
缺点:慎用,sql注入存在隐患
-->
<select id="selectLike" resultType="com.model.User" parameterType="string">
select * from student where sName LIKE '%${value}'
</select>
<!--MYSQL获得主键:两种方法 -->
<!-- keyProperty="sId" 生成主键的字段
resultType代表返回主键的数据类型
order、mysql选的是after Oracle选的是before
Oracle 产生主键策略是序列seq;mysql用select LAST_INSERT_ID()函数得到
以上配置全部写在<selectKey>里面 -->
<!-- <insert id="insertObj" parameterType="com.model.User" >
<selectKey keyProperty="sId" resultType="int" order="AFTER">
select LAST_INSERT_ID()
</selectKey>
insert into student(sName,sSex,sAge)values(#{sName},#{sSex},#{sAge});
</insert> -->
<!-- 2.另外一种写法 -->
<insert id="insertObj" parameterType="com.model.User" keyProperty="sId" useGeneratedKeys="true">
insert into student(sName,sSex,sAge)values(#{sName},#{sSex},#{sAge});
</insert>
</mapper>