mybatis框架初级版 实现单表增删改查 后续会有中级和高级版 分别介绍多表操作,动态sql片段处理 以及对Mybatis工具类的封装

第一步 搭建环境 引入核心jar
1)mybatis-3.2.2.jar
  Ojdbc5.jar
  Log4j.jar
2)引入配置文件
  a)  Log4j.properties---放在src下
    作用:日志的展示:在控制台打印 mybatis 运行日志
  b)mybatis-config.xml---放在 src 下
  作用:主要配置 mabatis运行时的环境
  c)xxx.Mapper.xml 位置随便放 作用:管理Dao接口,给Dao接口生成实现
 3) 初始化配置 配置mybatis运行环境
    Mybatis-config.xml配置文件核心作用
Log4j.properties 文件 样例 放在src下 作用:展示程序运行的具体过程
log4j.rootLogger=DEBUG, stdout

# SqlMap logging configuration...
log4j.logger.com.ibatis=DEBUG
log4j.logger.com.ibatis.common.jdbc.SimpleDataSource=DEBUG
log4j.logger.com.ibatis.sqlmap.engine.cache.CacheModel=DEBUG
log4j.logger.com.ibatis.sqlmap.engine.impl.SqlMapClientImpl=DEBUG
log4j.logger.com.ibatis.sqlmap.engine.builder.xml.SqlMapParser=DEBUG
log4j.logger.com.ibatis.common.util.StopWatch=DEBUG
log4j.logger.java.sql.Connection=DEBUG
log4j.logger.java.sql.Statement=DEBUG
log4j.logger.java.sql.PreparedStatement=DEBUG
log4j.logger.java.sql.ResultSet=DEBUG

# Console output...
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n
引入 mybatis-config.xml核心配置文件 放在src下
<?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="oracle">
		<environment id="oracle">
			<transactionManager type="JDBC"></transactionManager>
			<dataSource type="POOLED">
				<property name="driver" value="oracle.jdbc.OracleDriver"/>
				<property name="url" value="jdbc:oracle:thin:@localhost:1521:xe"/>
				<property name="username" value="hr"/>
				<property name="password" value="hr"/>
			</dataSource>
		</environment>
	</environments>
	
	<!-- 管理mapper文件 -->
	<mappers>
		<mapper resource="com/dao/Emp1DaoImpl.xml"/>
	</mappers>
</configuration>

第二步 建表(单表)
样例 sql 语句:
create table emp1(
  id varchar2(20) primary key,
  name varchar2(20)unique not null,
  password varchar2(6) check(length(password)=6)not null,
  salary number(8,2),
  age varchar2(3),
  sex varchar2(3) check(sex in('男','女')),
  entryday date,
  status varchar(2) check(status in('1','2'))
  );

  --创建 序列
  create sequence empid_seq start with 1 increment by 1;
  --查询表
  select * from emp1
第三步 创建数据库表对应的实体类
package com.entity;
import java.io.Serializable;
import java.util.Date;
//库表  Emp1 对应的实体 类 
//对应实体类最好是 实体类与表名相同 实体类的属性名分别一一对应数据库表中的字段名 最好相同一一对应
public class Empl1 implements Serializable {
    private String id;
    private String name;
    private String password;
    private double salary;
    private String age;
    private String sex;
    private Date entryday;
    private String status;
    public Empl1() {
    }
    public Empl1(String id, String name, String password, double salary, String age, String sex, Date entryday, String status) {
        this.id = id;
        this.name = name;
        this.password = password;
        this.salary = salary;
        this.age = age;
        this.sex = sex;
        this.entryday = entryday;
        this.status = status;
    }

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getPassword() {
        return password;
    }

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

    public double getSalary() {
        return salary;
    }

    public void setSalary(double salary) {
        this.salary = salary;
    }

    public String getAge() {
        return age;
    }

    public void setAge(String age) {
        this.age = age;
    }

    public String getSex() {
        return sex;
    }

    public void setSex(String sex) {
        this.sex = sex;
    }

    public Date getEntryday() {
        return entryday;
    }

    public void setEntryday(Date entryday) {
        this.entryday = entryday;
    }

    public String getStatus() {
        return status;
    }

    public void setStatus(String status) {
        this.status = status;
    }

    @Override
    public String toString() {
        return "Empl1{" +
                "id='" + id + '\'' +
                ", name='" + name + '\'' +
                ", password='" + password + '\'' +
                ", salary=" + salary +
                ", age='" + age + '\'' +
                ", sex='" + sex + '\'' +
                ", entryday='" + entryday + '\'' +
                ", status='" + status + '\'' +
                '}';
    }
}

第四步 创建 实体类对应的接口
package com.dao;
import com.entity.Empl1;
import java.util.List;
import org.apache.ibatis.annotations.Param;
public interface Emp1Dao {
    //登录 查询 当传入的参数为多个(大于一个) 则用注解注明 注解内的变量名应与具体sql语句用于变量名一致,如下列 登录功能
    public Empl1 fandNameAndPassDao(@Param("name")String name,@Param("password") String password);
    //注册 添加
    public void addEmp1Dao(Empl1 emp);
    //展示所有 
    public List<Empl1> fianEmp1AllDao();
    //根据 id 查询 一个对象
    public Empl1 fandByIdEmp1Dao(String id);
    //根据 id 删除
    public void deleteByIdEmp1Dao(String id);
    //根据 id 修改
    public void updateByIdEmp1Dao(Empl1 emp);
    //模糊查询 根据名称查询
    public List<Empl1> likefindall(String name);
    //根据名称查询一个人的对象
    public Empl1 fiandByNameEmp1Dao(String name);
    //获取 总条数
    public int FindEmpl1Count();

}

第五步 创建 Dao接口对应的MapperImpl.xml文件(取代jdbc实现类)
<?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" >
<mapper namespace="com.dao.Emp1Dao">
<!-- 登录 -->
<select id="fandNameAndPassDao" resultType="com.entity.Empl1">
select * from Emp1 where name =#{name}and password=#{password}
</select>
<!-- 注册 -->
<insert id="addEmp1Dao" parameterType="com.entity.Empl1" >
	 insert into emp1(id,name,password,salary,age,sex,entryday,status) values(empid_seq.nextval,#{name},#{password},#{salary},#{age},#{sex},#{entryday},#{status})
</insert>
<!-- 展示所有 -->
<select id="fianEmp1AllDao" resultType="com.entity.Empl1">
  select * from Emp1
</select>

<!--根据 id 查询 一个对象 -->
<select id="fandByIdEmp1Dao" resultType="com.entity.Empl1">
	select * from Emp1 where id =#{id}
</select>

<!--根据 id 修改 -->
<update id="updateByIdEmp1Dao" parameterType="com.entity.Empl1">
	update emp1 set name=#{name},salary=#{salary},age=#{age} where id=#{id}
</update>

<!--根据 id 删除 -->
<delete id="deleteByIdEmp1Dao">
	delete emp1 where id = #{id}
</delete>
<!--模糊查询 根据名称查询 -->
<select id="likefindall" resultType="com.entity.Empl1" >
 select * from emp1 where name like '%'||#{name}||'%' 
</select>

<!--根据名称查询一个人的对象 -->
<select id="fiandByNameEmp1Dao" resultType="com.entity.Empl1">
	 select * from Emp1 where name =#{name}
</select>
<!--获取本表数据的总条数 -->
 <select id="FindEmpl1Count" resultType="int">
	select count(*) from Emp1
</select>

</mapper>

第六步 用 test 测试类进行测试
//本测试类以展示所有为列 直接用最基本的方式获取 sqlSession 进行测试调用
package com.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.Emp1Dao;
import com.entity.Empl1;

public class EmpMapperXmlTest {
	//展示所有测试
	@Test
	public void fianEmp1AllDaoTest() throws IOException{
		 //1.通过 Resources 读取 mybatis-config.xml 配置文件
    	InputStream is = Resources.getResourceAsStream("mybatis-config.xml");
        //2 创建 SqlSessionFactory
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder ().build (is);
        //3.获取 sqlsession
        SqlSession sqlSession = sqlSessionFactory.openSession ();
        //4.通过 sqlsession 获取 Dao实现类
        Emp1Dao emp1Dao = sqlSession.getMapper(Emp1Dao.class);
        List<Empl1> fianEmp1AllDao = emp1Dao.fianEmp1AllDao();
        for (Empl1 empl1 : fianEmp1AllDao) {
			System.out.println(empl1);
		}		
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值