接口和局部配置文件要放在一起并且名字要相同
jar包
配置cofig和map
package com.dao;
//IuserDao
import java.util.List;
import com.model.User;
public interface IuserDao {
//查找全部
List<User> selectAll();
//入参要与方法名里面的类型相匹配
//根据id查找
User selectById(int id);
//删除记录
int delete(int id);
//更新记录
void update(User u);
//插入记录
void insertObj(User u);
}
//IuserDao.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对象类型 -->
<!--1.mapper代理,namespace写成接口的类路径 -->
<mapper namespace="com.dao.IuserDao">
<!--查找全部 -->
<select id="selectAll" resultType="com.model.User">
select * from student
</select>
<!-- 根据id查找 -->
<!--2. i对应接口里面的方法名,传入参数的类型必须与接口方法(int)数据类型相匹配
返回值也必须向匹配
局部配置文件的名称要与接口一致并且要与接口放在同一个包里
-->
<!-- 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>
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.dao.IuserDao;
import com.model.User;
public class TestFirst {
private SqlSessionFactory sf;//全局变量,依赖注入
//1.加载全局配置文件得到stream
//2.sessionfactory
//3.session
public SqlSessionFactory getSf() {
InputStream stream = null;
try {
stream = Resources.getResourceAsStream("SqlMapper.xml");
} catch (IOException e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
}
return new SqlSessionFactoryBuilder().build(stream);
}
@Test
public void test() {
SqlSessionFactory sf = new TestFirst().getSf();
SqlSession session = sf.openSession();
// 得到代理对象,获取接口的类路径
IuserDao userdao = session.getMapper(IuserDao.class);
//查找全部
// List<User> selectAll = userdao.selectAll();
// for (User user : selectAll) {
// System.out.println(user);
// }
//根据id查找
// User u = userdao.selectById(1);
// System.out.println(u);
//删除记录
// if(userdao.delete(15)==1)
// System.out.println("删除成功!");
// session.commit();
// session.close();
//更新
// User u = new User();
// u.setsID(1);
// User selectById = userdao.selectById(1);
// selectById.setSage(3);
// userdao.update(selectById);
// session.commit();
// System.out.println(u);
// session.close();
//插入
// User u = new User();
// u.setsName("张三");
// u.setSsex("男");
// u.setSage(48);
// userdao.insertObj(u);
// session.commit();
// session.close();
}
}
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>
<!-- 扫描包 -->
<package name="com.dao"/>
</mappers>
</configuration>