mybatis 双表增删改查(控制台版)


一、mybatis 所需相关jar 文件:
     

二、项目包结构

     

<!-- Mybatis 主配置文件 -->

<?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>

    <!-- 给实体类起别名 可以方便在mapper文件 使用 -->

    <typeAliases>

        <typeAlias type="mybatis.entity.Student" alias="stu" />

        <typeAlias type="mybatis.entity.Grade" alias="grade" />

    </typeAliases>

    <environments default="development">

        <environment id="development">

            <transactionManager type="JDBC" />

            <dataSource type="POOLED">

                <!-- Oracle数据库驱动 -->

                <property name="driver" value="oracle.jdbc.driver.OracleDriver" />

                <!-- Oracle数据库URL -->

                <property name="url" value="jdbc:oracle:thin:@localhost:1521:qxgora" />

                <!-- 数据库用户名 -->

                <property name="username" value="xiaoqiu" />

                <!-- 数据库密码 -->

                <property name="password" value="xiaoqiu" />

            </dataSource>

        </environment>

    </environments>

    <mappers>

        <!-- 映射Mapper.xml 有几个就映射几个 mapper -->

        <mapper resource="mybatis/entity/StudentMapper.xml" />

    </mappers>

</configuration>

//Mybatis 操作session 工具类

package mybatis.util;

import java.io.IOException;

import org.apache.ibatis.io.Resources;

import org.apache.ibatis.session.SqlSession;

import org.apache.ibatis.session.SqlSessionFactory;

import org.apache.ibatis.session.SqlSessionFactoryBuilder;

public final class MybatisUtil {

    //2.获得Session (sqlSession)

    //3.调用Mapper.xml

    //4.返回结果

    //session工厂

    private static SqlSessionFactory factory = null;

    //session

    private static SqlSession session = null;

    //获取当前项目下 mybatis 主配置文件

    private static String resouces = "mybatis-config.xml";

    /**

     * 获得session

     * @return

     * @throws IOException

     */

    public static SqlSession getSqlSession() throws IOException {

            factory = new SqlSessionFactoryBuilder().build(Resources.getResourceAsReader(resouces));

            if (null == session) {

                session = factory.openSession();

            }

            return session;

    }

    /**

     * 关闭session

     */

    public static  void closeSession(){

        session.close();

    }

}

//实体类对象 student

package mybatis.entity;

import java.util.Date;

public class Student {

    private int stuId; 

    private String stuName; 

    private int stuAge; 

    private Date stuBirthDay; 

    private String stuPwd;

    private int stuGid;

    //外键()

    private Grade grade;

    public int getStuGid() {

        return stuGid;

    }

    public void setStuGid(int stuGid) {

        this.stuGid = stuGid;

    }

    public int getStuId() {

        return stuId;

    }

    public void setStuId(int stuId) {

        this.stuId = stuId;

    }

    public String getStuName() {

        return stuName;

    }

    public void setStuName(String stuName) {

        this.stuName = stuName;

    }

    public int getStuAge() {

        return stuAge;

    }

    public void setStuAge(int stuAge) {

        this.stuAge = stuAge;

    }

    public Date getStuBirthDay() {

        return stuBirthDay;

    }

    public void setStuBirthDay(Date stuBirthDay) {

        this.stuBirthDay = stuBirthDay;

    }

    public String getStuPwd() {

        return stuPwd;

    }

    public void setStuPwd(String stuPwd) {

        this.stuPwd = stuPwd;

    }

    public Grade getGrade() {

        return grade;

    }

    public void setGrade(Grade grade) {

        this.grade = grade;

    }

    @Override

    public String toString() {

        return "Student [学生编号=" + stuId + ", 学生姓名=" + stuName + ", 年龄="

                + stuAge + ", 出生日期=" + stuBirthDay + ", 密码="

                + stuPwd + ", 年级=" + grade.getgName() + "]";

    }

    

    

}

//实体对象类 grade

package mybatis.entity;

public class Grade {

    private int gId; 

    private String gName;

    public int getgId() {

        return gId;

    }

    public void setgId(int gId) {

        this.gId = gId;

    }

    public String getgName() {

        return gName;

    }

    public void setgName(String gName) {

        this.gName = gName;

    }

    

}

//学生信息 DAO 接口类

package mybatis.dao;

import java.util.List;

import mybatis.entity.Student;

public interface IStudentDao {

    /**

     * 按学生姓名姓氏模糊查询学生信息

     * @param stuName 姓氏

     * @return 学生集合

     */

    public abstract List<Student> selectStudentByLike(String stuName);

    /**

     * 查询所有学生信息

     * @return

     */

    public abstract List<Student> selectStudents();

    /**

     * 新增学生信息

     * @param stu 学生对象

     * @return 受影响的行数

     */

    public abstract int insertStudent(Student stu);

    /**

     * 修改学生信息

     * @param stu 学生对象

     * @return 受影响的行数

     */

    public abstract int updateStudent(Student stu);

    /**

     * 按主键学生信息

     * @param stuId 主键(学生Id)

     * @return 受影响的行数

     */

    public abstract int deleteStudent(int stuId);

}

<?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="mybatis.dao.IStudentDao">

    <!-- 返回结果的Map 唯一的 通过id属性来找 -->

    <resultMap type="mybatis.entity.Student" id="stuMap">

        <!-- 一般没什么特殊情况 只需要写property属性即可 column 属性只是为了和数据库一致 -->

        <result property="stuId" column="STUID" />

        <result property="stuName" column="STUNAME" />

        <result property="stuAge" column="STUAGE" />

        <result property="stuBirthDay" column="STUBIRTHDAY" />

        <result property="stuPwd" column="STUPWD" />

        <!-- 外键属性 -->

        <association property="grade" javaType="mybatis.entity.Grade"

            column="STUGID">

            <result property="gId" column="GID" />

            <result property="gName" column="GNAME" />

        </association>

    </resultMap>

    <!-- 替代,语句中的内容,简写 -->

    <sql id="stus">

        stuId,stuName,stuAge,stuBirthDay,stuPwd,stuGid

    </sql>

    <select id="selectStudentByLike" resultMap="stuMap" parameterType="java.lang.String">

        select *

        from

        student s

        INNER JOIN GRADE g ON g.gId= s.stugId

        WHERE stuName LIKE #{stuName}

    </select>

    <!-- 查询所有学生信息 resultType 代表当前结果返回什么 如果是List<Student> 

         则直接返回当前实体类即可 不提供返回集合 

        resultMap 代表当前结果所对应的Map -->

    <select id="selectStudents" resultType="stu" resultMap="stuMap">

        select *

        from

        student s

        INNER JOIN GRADE g ON g.gId= s.stugId

    </select>

    <!-- 新增学生信息 parameterType 代表的当前方法参数 什么类型的 insert 没有返回属性 -->

    <insert id="insertStudent" parameterType="stu">

        <!-- 在执行之前获取序列 以便于插入主键值 -->

        <selectKey resultType="int" order="BEFORE" keyProperty="stuId">

            <![CDATA[

                select seq_student.nextval from dual 

            ]]>

        </selectKey>

        <![CDATA[

            insert into student

            values(#{stuId},#{stuName},#{stuAge},#{stuBirthDay},#{stuPwd},#{stuGid})

        ]]>

    </insert>

    <!-- 更新学生信息 -->

    <update id="updateStudent" parameterType="stu">

        <![CDATA[

            update student

            set 

                stuName = #{stuName},

                stuAge = #{stuAge},

                stuBirthDay = #{stuBirthDay},

                stuPwd = #{stuPwd},

                stuGid = #{stuGid}

            where stuId = #{stuId}

        ]]>

    </update>

    <!-- 按ID(主键值 ) 删除学生信息 -->

    <delete id="deleteStudent" parameterType="int">

        <![CDATA[

            delete

                from student

            where

                stuId = #{stuId}

        ]]>

    </delete>

</mapper>

//操作学生信息 接口实现操作类

package mybatis.dao.impl;

import java.io.IOException;

import java.text.ParseException;

import java.text.SimpleDateFormat;

import java.util.List;

import org.apache.ibatis.session.SqlSession;

import mybatis.dao.IStudentDao;

import mybatis.entity.Grade;

import mybatis.entity.Student;

import mybatis.util.MybatisUtil;

@SuppressWarnings("unused")

public class StudentDaoImpl implements IStudentDao {

    /**

     * 查询所有学生信息

     */

    @Override

    public List<Student> selectStudents() {

        try {

            SqlSession session = MybatisUtil.getSqlSession();

            return session.selectList("mybatis.dao.IStudentDao.selectStudents");

            //return session.getMapper(IStudentDao.class).selectStudents();

        } catch (IOException e) {

            e.printStackTrace();

        } finally {

        }

        return null;

    }

    /**

     * 新增学生信息

     */

    @Override

    public int insertStudent(Student stu) {

        int res = -1;

        SqlSession session = null;

        try {

            session = MybatisUtil.getSqlSession();

            res = session.getMapper(IStudentDao.class).insertStudent(stu);

            session.commit();

        } catch (Exception e) {

            session.rollback();

        } finally {

            MybatisUtil.closeSession();

        }

        return res;

    }

    /**

     * 更新学生信息

     */

    @Override

    public int updateStudent(Student stu) {

        int res = -1;

        SqlSession session = null;

        try {

            session = MybatisUtil.getSqlSession();

            res = session.getMapper(IStudentDao.class).updateStudent(stu);

            session.commit();

        } catch (Exception e) {

            session.rollback();

        } finally {

            MybatisUtil.closeSession();

        }

        return res;

    }

    /**

     * 删除学生信息

     * @param stuId

     * @return

     */

    @Override

    public int deleteStudent(int stuId) {

        int res = -1;

        SqlSession session = null;

        try {

            session = MybatisUtil.getSqlSession();

            res = session.getMapper(IStudentDao.class).deleteStudent(stuId);

            session.commit();

        } catch (Exception e) {

        }

        return res;

    }

    @Override

    public List<Student> selectStudentByLike(String stuName) {

        try {

            SqlSession session = MybatisUtil.getSqlSession();

            return session.selectList("mybatis.dao.IStudentDao.selectStudentByLike",stuName+"%");

//          return session.getMapper(IStudentDao.class).selectStudentByLike("%"+stuName+"%");

        } catch (IOException e) {

            e.printStackTrace();

        } finally {

        }

        return null;

    }

}

//数据测试类

package mybatis.test;

import java.text.ParseException;

import java.text.SimpleDateFormat;

import mybatis.dao.IStudentDao;

import mybatis.dao.impl.StudentDaoImpl;

import mybatis.entity.Student;

public class MyBatisTest {

    //引用DAO 接口

    private static IStudentDao stuDao = new StudentDaoImpl();

    public static IStudentDao getStuDao() {

        return stuDao;

    }

    public static void setStuDao(IStudentDao stuDao) {

        MyBatisTest.stuDao = stuDao;

    }

    /**

     * 测试方法

     * @param args

     * @throws ParseException

     */

    public static void main(String[] args) throws ParseException {

        selectStuByLike();

        // 查询所有

        //selectStus();

        // 新增

        // insertStu();

        // 修改

        // updateStu();

        // 删除

        //deleteStu();

        

    }

    //按姓氏查询学生信息

    private static void selectStuByLike() {

        String stuName ="张";

        for (Student stu : stuDao.selectStudentByLike(stuName)) {

            System.out.println(stu);

        }

    }

    //查询所有学生信息

    private static void selectStus() {

        for (Student s : stuDao.selectStudents()) {

            System.out.println(s);

        }

    }

    //删除学生信息

    private static void deleteStu() {

        int stuId = 0;

        int res = stuDao.deleteStudent(stuId);

        if (res > 0) {

            System.out.println("OK");

        } else {

            System.out.println("NO");

        }

    }

    //更新学生信息

    private static void updateStu() throws ParseException {

        Student stu = new Student();

        stu.setStuName("你好");

        stu.setStuAge(25);

        stu.setStuPwd("456789");

        stu.setStuBirthDay(new SimpleDateFormat("yyyy-MM-dd").parse("2010-09-09"));

        stu.setStuGid(3);

        stu.setStuId(24);

        int res = new StudentDaoImpl().updateStudent(stu);

        if (res > 0) {

            System.out.println("OK");

        } else {

            System.out.println("NO");

        }

    }

    //新增学生信息

    private static void insertStu() throws ParseException {

        Student stu = new Student();

        stu.setStuName("hhh");

        stu.setStuAge(20);

        stu.setStuPwd("12345");

        stu.setStuBirthDay(new SimpleDateFormat("yyyy-MM-dd").parse("2012-09-09"));

        stu.setStuGid(3);

        int res = new StudentDaoImpl().insertStudent(stu);

        if (res > 0) {

            System.out.println("OK");

        } else {

            System.out.println("NO");

        }

    }

}

时间: 2024-10-03 15:20:33

mybatis 双表增删改查(控制台版)的相关文章

Mybatis实现增删改查及分页查询的方法_java

MyBatis的前身就是iBatis.是一个数据持久层(ORM)框架. MyBatis是支持普通SQL查询,存储过程和高级映射的优秀持 久层框架.MyBatis消除了几乎所有的JDBC 代码和参数的手工 设置以及结果集的检索.MyBatis使用简单的XML或注解用于 配置和原始映射,将接口和Java 的POJOs(Plan Old Java Objects,普通的Java 对象)映射成数据库中的记录.每个 MyBatis应用程序主要都是使用SqlSessionFactory实例的,一个 SqlS

简述Mybatis增删改查实例代码_java

编写一个简单的mybatis进行插入数据的实例 1 数据库建表 其中建表dob=Date of Birth 的意思 create table students (stud_id number primary key, name varchar2(20), email varchar2(20), dob date ); Oracle数据库中出现表已创建,则表示创建成功,如果出现名称已被使用,则可在建表之前进行删除操作:drop table students;或者进行级联删除drop table s

mybatis 一对多配置关系实现在一个映射文件中进行增删改查?

问题描述 mybatis 一对多配置关系实现在一个映射文件中进行增删改查? 一对多关系表,如何在一个映射文件中实现对两个表的增删改查操作? 解决方案 http://wenku.baidu.com/link?url=Pxf2M0_Xb42weBxGfesIrn2_nCLTCEQZr1ZuOxvq5-nu_w1rBkgltw7Qlz-iBnv7lDfGf8h_J7i9plUEzaQfpI5JviC0NsTnyV95fdyUwvu 解决方案二: 你在xml定义两个表的sql匹配就行.增删改查就对这两个

求一份Struts2+Spring+mybatis整合的增删改查及分页和多条件查询的源代码

问题描述 求一份Struts2+Spring+mybatis整合的增删改查及分页和多条件查询的源代码 小白求一份Struts2+Spring+mybatis整合的增删改查及分页和多条件查询的源代码,用jQuery实现jsp页面 解决方案 SpringMVC+Spring+mybatis是否需要呢?笔者之前写了一些相关的文章,也有源代码,你可以参考下:http://blog.csdn.net/evankaka/article/details/49452201http://blog.csdn.net

mybatis generator 配置 反向生成Entity简单增删改查(推荐)_java

mybatis generator 配置 反向生成Entity简单增删改查实例代码如下所示: <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE generatorConfiguration PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN" "http://mybatis.org/dtd

java web实现增删改查后,应该学习哪些高级技术?

问题描述 java web实现增删改查后,应该学习哪些高级技术? 做了个小项目,实现了curd,想继续往缓存,并发,负载高级深入,请推荐一个详细的高级技术路线?最好有书 解决方案 javaweb深入浅出,不过这个方向研究,主要还是在公司里学的会更实用些 解决方案二: 多线程,Socket,I/O JSP.EL.JSTL,AJAX JavaScript,jQuery JSON,XML EJB(可忽略) 各种框架 ......太多了 解决方案三: 多线程,Socket,I/O JSP.EL.JSTL

二、SQL语句映射文件(2)增删改查、参数、缓存

 二.SQL语句映射文件(2)增删改查.参数.缓存 2013-09-06 17:05:42 标签:配置文件 动态 元素 MyBatis学习 之 一.MyBatis简介与配置MyBatis+Spring+MySql MyBatis学习 之 二.SQL语句映射文件(1)resultMap MyBatis学习 之 二.SQL语句映射文件(2)增删改查.参数.缓存 MyBatis学习 之 三.动态SQL语句 MyBatis学习 之 四.MyBatis配置文件 2.2 select 一个select 元素

mybatis-简单的增删改查操作

mybatis是apache下一个开源项目,原称为ibatis,后改名为mybatis. 是一个基于Java的持久层框架.(类似与hibetnate). MyBatis 是支持普通 SQL查询,存储过程和高级映射的优秀持久层框架.MyBatis 消除了几乎所有的JDBC代码和参数的手工设置以及结果集的检索.MyBatis 使用简单的 XML或注解用于配置和原始映射,将接口和 Java 的POJOs(Plain Old Java Objects,普通的 Java对象)映射成数据库中的记录. **重

将xml文件作为一个小的数据库,进行学生的增删改查的简单实例_AJAX相关

1.xml文件: <?xml version="1.0" encoding="UTF-8"?><Students> <student id="2"> <name>ttt</name> <age>44</age> </student> <student id="3"> <name>linda2</name