澳门新萄京官方网站-www.8455.com-澳门新萄京赌场网址

澳门新萄京官方网站:壹次向表中插入多条数据

2019-07-20 作者:数据库网络   |   浏览(161)

转自:)

单表的CU奥迪Q3D操作(使用mapper动态代理)

MyBatis框架抛开dao的落到实处类,直接固定到映射文件mapper的对应sql语句,对DB实行操作。这种dao的兑现格局成为mapper的动态代理情势。

mapper动态代理方式不须求程序猿达成dao接口。接口是由MyBatis结合映射文件自动生成的动态代理完结的。

1.映射文书的namespace属性值

一般意况下,贰个dao接口的落到实处类格局运用的是同二个sql映射文件中的sql映射id。所以,MyBatis框架须求,将映射文件中<mapper/>标签的namespace属性设为dao接口的全类名,则系统会依赖办法所属dao接口,自动到对应namespace的炫酷文件中寻觅有关的sql映射。

差不离来讲,通过接口名就可以定位到映射文件mapper。

2.修改日志输出调节文件

mapper的namespace修改了,则须要将日志输出调控文件中的logger的输出对象开始展览改换

##define a logger
#log4j.logger.namespace_value=trace,console
log4j.logger.com.hcx.dao.IStudentDao=trace,console

3.dao接口主意名

MyBatis框架必要,接口中的方法名,与映射文件中相应的sql标签的id值同样。系统会自动依据章程名到相应的照耀文件中搜寻同名的sql映射id。

简言之来讲,通过艺术名就可牢固到映射文件mapper中相应的sql语句。

接口:

public interface IStudentDao {

    int insertStudent(Student student); 
    void deleteStudentById(int id);
    void updateStudent(Student student);

    List<Student> selectAllStudents();
    Map<String, Object> selectAllStudentsMap();

    Student selectStudentById(int id);
    List<Student> selectStudentsByName(String name);

}

映射:

<select id="selectStudnetById" parameterType="int" resultType="com.hcx.beans.Student">
    select id,name,age,score,birthday from student where id=#{id}
</select>

4.dao对象的获得

应用时,只供给调用Sqlsession的getMapper()方法,就能够获取钦命接口的落实类对象。该方法的参数为钦赐dao接口类的class值。

session = factory.openSession();
dao = session.getMapper(IStudentDao.class);

5.删除dao实现类

鉴于经过调用dao接口的主意,不仅可以够从sql映射文件中找到所要实施sql语句,还可由此艺术参数及再次回到值,将sql语句的动态参数字传送入,将查询结果回到。所以,dao的兑现职业,完全能够由MyBatis系统自动遵照映射文件实现。所以,dao的落实类就不再须要了。

dao完成目的是由jdk的proxy动态代理自动生成的。

6.测试类

1.在before评释方法中拿走到Sqlsession对象后,通过Sqlsession的getMapper方法成立dao接口落到实处类的动态代理对象。在after申明方法中关闭Sqlsession对象。

public class MyTest {

    private IStudentDao dao;
    private SqlSession session;

    @Before
    public void setUp(){
        session = MyBatisUtils.getSqlSession();
        dao = session.getMapper(IStudentDao.class);
    }

    @After
    public void tearDown(){
        if(session!=null){
            session.close();
        }
    }
}

2.增多Sqlsession的提交方法

在增加和删除改测验方法的结尾,加多Sqlsession的commit方法,达成提交。

@Test
public void test01(){
    Student student = new Student("张三",23,99.8);
    dao.insertStudent(student);
    session.commit();
}

@Test
public void test02(){
    Student student = new Student("张三",23,99.8);
    dao.insertStudentCatchId(student);
    System.out.println("student=" student);
    session.commit();
}

@Test
public void test03(){
    dao.deleteStudentById(3);   
    session.commit();
}

3.剔除selectStudentMap()方法测量试验

MyBatis框架对于dao查询的机动完成,底层只会调用selectOne与selectList()方法。而框架选用格局的标准是测量检验类中用户接受再次回到值得对象类型。若接收类型为list,则自动选用selectList()方法;不然,自动采用selectOne()方法。

吸取类型为map,所以框架采纳了selectOne()方法,会报错。

7.多询问条件无法完全接收难题的缓和

在其实工作中,表单中所给出的询问条件临时是万般无奈将其包装为二个对象的,也便是说,查询格局只好指点八个参数,而不能够带领将着那八个参数实行李包裹装的三个目的。对于这些主题素材,有三种缓慢解决方案。

方案一:将那四个参数封装为三个map

将那多少个参数封装为一个Map<String,Object>,依据Map举办询问。

1.dao接口

List<Student> selectStudentByMap(Map<String, Object> map);

2.测试类

@Test
public void test10(){
    Map<String, Object> map = new HashMap<String,Object>();
    map.put("nameCondition", "张");
    map.put("ageCondition",22);

    List<Student> students = dao.selectStudentByMap(map);
    for (Student student : students) {
        System.out.println(student);
    }
}

3.修改映射文件

<select id="selectStudentByMap" resultType="Student">
    select *from student
    where name like '%' #{nameCondition} '%'
    and age > #{ageCondition}
</select>

方案二:几个参数每一种接收

对于mapper中的SQL语句,能够由此参数索引#{index}的办法挨个接收每一个参数。

1.dao接口

List<Student> selectStudentByConditions(String name,int age);

2.测试类

@Test
public void test11(){
    List<Student> students = dao.selectStudentByConditions("张", 22);
    for (Student student : students) {
        System.out.println(student);
    }
}

3.映射文件

<select id="selectStudentByconditions" resultType="Student">
    select * from student
    where name like '%' #{0} '%'
    and age > #{1}
</select>

一. 简介

目录

这一品级累坏小弟自身鸟,偶相当久未有认为那样“充实”过了。尤其是哼唧哼唧地写了过多sql语句,好邪恶啊.偶未来所干的活,平时都是这么的:在贰个拼接sql的xml文件内,繁琐的列名和别名,目迷五色的动态条件拼接......借使这一部分做事都交由orm自动去做该多好啊。好了,言归正传。用iBatis.net开拓的时候,sql语句常常都会有双重的一对,比如,我们将来要select一个表的有个别列,不过查询条件分化。若是多个select的statement拼接sql语句不可能满意查询(那么些依旧很健康的),大家常常都会写多个以致多少个statement。那年select列名这种sql语句就能不可幸免地出现重复。只怕你会说复制粘贴不花时间,比相当慢啊。可是,正像有些高人所讲的那样,复制粘贴是具有程序员的毒药(记不清楚原话了,大要。特别惭愧的是,小编在实际上的付出中复制粘贴了相当多代码,虽说一干这种事笔者就标准反射地排斥,可是,适本地复制粘贴是不可转换局面地,哪个人让笔者是程序员呢,呵呵)。大家一定想到要用一种更加好的艺术化解重复的sql语句难题。没有错,正是iBatis.net已经提供的复用sql片段功效,官方解释见这篇的3.3.3.1“Reusing SQL Fragments”。上边摘抄一下原稿的一段查询的sql语句:

<span style="font-size:16px;font-weight:bold;">
摘要:
在mssql中,一条sql语句默感觉一个事情,下文体现什么在一条sql语句中,插入多行数据
</span>
<hr />
例:  

动态SQL

动态sql,首要用以减轻查询条件不分明的情况:在程序运营时期,依照用户提交的询问条件进行询问。提交的查询条件不一样,施行的sql语句不一致。若将种种恐怕的情况均逐个列出,对持有准则进行排列组合,将会现身大量的sql语句。此时,可选择动态sql来解决那样的主题素材

澳门新萄京官方网站 1

用户自定义查询.PNG

动态sql,即通过MyBatis提供的各类标签对准则作出决断以落到实处拼接sql语句

此处的原则决断使用的表明式为OGNL表明式。常用的动态SQL标签有<if>、<where>、<choose/>、<foreach>等。

1.实体类:

public class Student {

    private Integer id;
    private String name;
    private int age;
    private double score;
    //无参构造器与带参构造器
    //getter 和 setter
    //toString()
}

2.测试类

public class MyTest {

    private IStudentDao dao;
    private SqlSession session;

    @Before
    public void setUp(){
        session = MyBatisUtils.getSqlSession();
        dao = session.getMapper(IStudentDao.class);
    }

    @After
    public void tearDown(){
        if(session!=null){
            session.close();
        }
    }
}

注意事项:

在mapper的动态sql中若出现超越号(>)、小于号(<)、大于等于号(>=)、小于等于号(<=)等标记,最棒将其转移为实体符号。不然,xml恐怕会产出分析出错难题。

澳门新萄京官方网站 2

轮换准绳.PNG

1.<if/>标签

对于该标签的实践,当test的值为true时,会将其含有的sql片段拼接到其后所在的sql语句中。

例:查询出满意用户提交查询条件的持有学生。用户提交的查询条件得以包蕴一个人名的混淆查询,同有时间仍可以分包贰个岁数的下限。当然,用户在付给表单时或然多少个规范均作出了设定,也恐怕四个规范均不做设定,也得以只做在那之中一项设定。

查询条件不鲜明,查询条件信赖于用户提交的剧情。此时,就可选取动态sql语句,依据用户提交内容对将在试行的sql进行拼接。

dao接口:

public interface IStudentDao {      
    List<Student> selectStudentsIf(Student student) 
}

辉映文件:

<select id="selectStudentsIf" resultType="Student">
    select * from student
    where 1=1
    <if test="name !=null and name!=''">
        and name like '%' #{name} '%'
    </if>
    <if test="age > 0">
        and age > #{age}
    </if>
</select>

测试类:

@Test
public void test01(){
    Student student = new Student();
    List<Student> students = dao.selectStudentsIf(student);
    System.out.println(students);
}

2.<where/>标签

dao接口:

public interface IStudentDao {

    List<Student> selectStudentsIf(Student student);
    List<Student> selectStudentsWhere(Student student);
}

炫丽文件:

<select id="selectStudentsWhere" resultType="Student">
    select * from student
    <where>
        <if test="name!=null and name!=''">
            and name like '%' #{name} '%'
        </if>
        <if test="age > 0">
            and age > #{age}
        </if>
    </where>
</select>

测试:

@Test
public void test02(){
    Student student = new Student();
    List<Student> students = dao.selectStudentsWhere(student);
    System.out.println(students);
}

3.<choose/>标签

该标签只好够涵盖<when/><otherwise/>,能够富含多个<when/>与贰个<otherwise/>。他们一同利用,达成java中的开关语句switch..case功用。

急需:若姓名不空,则按姓名查询;若姓名称叫空,则按年龄查询;若未有询问条件,则尚未查询结果。

dao接口:

public interface IStudentDao {

    List<Student> selectStudentsIf(Student student);
    List<Student> selectStudentsWhere(Student student);
    List<Student> selectStudentsChoose(Student student);
}

炫目文件:

对此<choose/>标签,其会从第三个<when/>开头各个向后张开标准化剖断。若现身<when/>中的test属性值为true的情况,则直接结束<choose/>标签,不再向后开始展览判断查找。若持有<when/>的test推断结果均为false,则最终会试行<otherwise/>标签。

<select id="selectStudentsChoose" resultType="Student">
    select * from student
    <where>
        <choose>
            <when test="name!=null and name!=''">
                and name like '%' #{name} '%'
            </when>
            <when test="age>0">
                and age < #{age}
            </when>
            <otherwise>
                and 1 != 1
            </otherwise>
        </choose>
    </where>
</select>

测试类:

@Test
public void test03(){
    Student student = new Student();
    List<Student> students = dao.selectStudentsChoose(student);
    System.out.println(students);
}

4.<foreach/>标签--遍历数组

<foreach/>标签用于落到实处对于数组于集中的遍历。对其采用,须要专注:

  • collection表示要遍历的成团类型,这里是数组,即array
  • open、close、separator为对遍历内容的SQL拼接

dao接口:

public interface IStudentDao {

    List<Student> selectStudentsIf(Student student);
    List<Student> selectStudentsWhere(Student student);
    List<Student> selectStudentsChoose(Student student);
    List<Student> selectStudentsForeachArray(Object[] studentIds);
}

炫酷文件

动态sql的剖断中动用的都以OGNL表明式。OGNL表达式中的数组使用array表示,数首席实行官度使用array.length表示。

<select id="selectStudentsForeachArray" resultType="Student">
    select * from student
    <if test="array !=null and array.length >0">
        where id in
        <foreach collection="array" open="(" close=")" item="myid" separator=",">
            #{myid}
        </foreach>
    </if>
</select>

澳门新萄京官方网站 3

foreach标签.PNG

测试类:

@Test
public void test04(){   
    Object[] studentIds = new Object[]{1,3};
    List<Student> students = dao.selectStudentsForeachArray(studentIds);
    System.out.println(students);
}

5.<foreach/>标签--遍历泛型为中心类型的List

dao接口:

public interface IStudentDao {

    List<Student> selectStudentsIf(Student student);
    List<Student> selectStudentsWhere(Student student);
    List<Student> selectStudentsChoose(Student student);
    List<Student> selectStudentsForeachArray(Object[] studentIds);
    List<Student> selectStudentsForeachList(List<Integer> studentIds);
}

绚烂文件:

OGNL表明式中的List使用list表示,其大小使用list.size表示。

<select id="selectStudentsForeachList" resultType="Student">
    select * from student
    <if test="list!=null and list.size > 0">
        where id in
        <foreach collection="list"  open="(" close=")" item="myid" separator=",">
            #{myid}
        </foreach>
    </if>
</select>

测试类:

@Test
public void test05(){
    List<Integer> studentIds = new ArrayList<Integer>();
    student.add(1);
    student.add(3);

    List<Student> students = dao.selectStudentsForeachList(studentIds);
    System.out.println(students);   
}

6.<foreach/>标签--遍历泛型为自定义类型的List

dao接口:

List<Student> selectStudentsForeachList2(List<Student> students);

照耀文件:

专注,这里的当下遍历对象类型是List中的泛型,就是Student对象。

<select id="selectStudentsForeachList2" resultType="Student">
    <!-- select * from student where id in(1,3) -->
    select * from student
    <if test="list!=null and list.size > 0">
        where id in
        <foreach collection="list"  open="(" close=")" item="stu" separator=",">
            #{stu.id}
        </foreach>
    </if>
</select>

测试类:

@Test
public void test09(){
    Student student1 = new Student();
    student1.setId(1);
    Student student3 = new Student();
    student3.setId(3);

    List<Student> students = new ArrayList<Student>();
    students.add(student1);
    students.add(student3);

    students = dao.selectStudentsForeachList2(students);
    System.out.println(students);
}

7.<sql/>标签

<sql/>标签用于定义sql片段,以便别的sql标签复用。而别的标签使用该SQL片段,必要动用<include/>子标签。该<sql/>标签能够定义SQL语句中的任何部分,所以<include/>子标签能够放在动态sql的其余岗位

dao接口:

List<Student> selectStudentsBySQLFragment(List<Student> students);

绚烂文件:

澳门新萄京官方网站 4

使用sql片段.PNG

测试类:

@Test
public void test09(){
    Student student1 = new Student();
    student1.setId(1);
    Student student3 = new Student();
    student3.setId(3);

    List<Student> students = new ArrayList<Student>();
    students.add(student1);
    students.add(student3);

    students = dao.selectStudentsBySQLFragment(students);
    System.out.println(students);
}

mybatis开始时代版本叫做Ibatis,近来代码托管在github,是多少个对jdbc实行李包裹装的长久层框架。mybatis通过xml或注脚举行计划,将“java对象”与“sql语句中的参数”自动映射生成最后奉行的sql语句,并将sql语句施行结果机关映射成java对象,再次来到给业务层(service)应用。

什么是SQLHelper

澳门新萄京官方网站 5澳门新萄京官方网站 6Code
<sql id="selectItem_fragment">
FROM items
WHERE parentid = #value#
</sql>

create table test (keyId int identity,info varchar(10))
go
insert into test(info) values('a'),('b'),('ac'),('ad'),('e')
----采用在每个插入的value后面加入一个逗号
go
select * from test 
go
truncate table test 
drop table test 

二.利用流程

SqlHelper配置项

<select id="selectItemCount" parameterClass="int" resultClass="int">
SELECT COUNT(*) AS total
<include refid="selectItem_fragment"/>
</select>

 

2.1.  配置pom.xml,加入mybatis依赖

SqlHelper调用源码

<select id="selectItems" parameterClass="int" resultClass="Item">
SELECT id, name
<include refid="selectItem_fragment"/>
</select>

<dependency>

重要成员

说明:

     <groupId>org.mybatis</groupId>

注意事项

1、sql和include标签
这么些没什么好说的,正是iBatis的正经,都这么写。
2、注意点:
正像你见到的那么,sql标签组装的公用sql语句不能传递参数;分割公共sql语句也是三个技术,看开荒者的私有习于旧贯,一样是询问条件,有人就喜欢放进公共部分,有人就垂怜拆分;命名也是门学问,公共sql语句的id若是在二个xml文件中冒出了,其余的地方要是重名,或者因为布署原因给开垦者带来不要求的难为。因为在运作时,iBatis只怕会抛出非常并进步你已经存在三个平等的投射id,这是小编开荒中实际出现过的。
从今改用iBatis现在,也不知是喜是忧。以前比较自如的一款orm,浪漫有余(大约不用写sql和xml),可是灵活不足,那一点必须承认。而iBatis确实非常灵活和方便,但是实际上的费用情形屡次柳暗花明,sql写了非常多居多。在维护老系统的sq语句l时,发掘自身以往写的那一坨也可以有一点“乱棍打死老师傅”的主旋律,哈哈。若是以后有人维护偶写的sql语句,即便累的挂了就算了,倘若命硬还活着,在累的脱肛的时候,千万表拍偶啊。

     <artifactId>mybatis</artifactId>

源程序(中文注释)

     <version>3.4.5</version>

编辑本段什么是SQLHelper

SqlHelper是二个基于.NET Framework的数据库操作组件。组件中蕴藏数据库操作方法,如今SqlHelper有广大版本,重要以微软一始发发表的SqlHelper类,前边包蕴进了Enterprise Library开源包中了。还会有二个主要版本是dbhelper.org开源的sqlhelper组件,优点是精简,高品质,不唯有帮衬sqlserver,同期援助sqlserver、oracle、access、Mysql数据库,也是叁个开源项目,提供无偿下载。

SqlHelper用于简化你重新的去写那多少个数据库连接(SqlConnection),SqlCommand,SqlDataReader等等。SqlHelper 封装过后一般性是只要求给艺术传入一些参数如数据库连接字符串,SQL参数等,就足以访谈数据库了,很有利。

SqlHelper 类用于通过一组静态方法来封装数据访谈功用。该类不可能被持续或实例化,因而将其宣称为涵盖专项使用构造函数的不可承袭类。在 SqlHelper 类中完成的每种方法都提供了一组同样的重载。那提供了一种很好的应用 SqlHelper 类来试行命令的方式,同不时候为开垦人士采用访问数据的点子提供了必不可缺的油滑。每一种格局的重载都扶助差别的措施参数,由此开采人员能够明确传递连接、事务和参数音信的格局。

</dependency>

编写本段SqlHelper配置项

[1]在行使SqlHelper前最佳使用web.config配置连接字符串,这样方便网址的可移植性和代码的精简。

<connectionStrings>

<!--SqlServerHelper连接字符串设定-->

<add connectionString="server=.;uid=sa;pwd=123456;database=yourdatabase" name="SqlServerHelper"/>

<!--Oracle连接字符串设定-->

<add connectionString="Data Source=orcl;User Id=system;Password=***;Integrated Security=no" name="OracleHelper"/>

<!--MySql连接字符串设定-->

<add connectionString="server=localhost;uid=root;pwd=123456;database=mysqldatabase" name="MySqlHelper"/>

</connectionStrings>

2.2预备布署文件sqlMapConfig.xml(mybatis的主配置文件)

编写本段SqlHelper调用源码

编辑SqlHelper调用代码:

SqlHelper帮助各个数据库包括MySql、SqlServer、Oracle、Access数据库,要是的数据库是SqlServer,那么您能够运用SqlServerHelper类,假诺是MySql,可以运用MySqlHelper,要是是Access,能够行使AccessHelper。假使是Oracle则能够动用OracleHelper类。

SqlHelper的书写风格非常多,你能够采纳本人的须要和欣赏使用静态办法或对象格局。各和利弊。选择景况采用呢!

第一种,静态措施,静态格局也是时下采用最多的一种,因为其简要,所以在写贰个Sql语句时,用三个形式就足以化解。假设三个进度需求多少个Sql语句实行时,得成立SqlConnection和调控他的传参,使语句复杂。恐怕正是每实施贰个sql语句让SqlConnection创制一遍,使品质受到震慑。不过在只举行四个回顾的查询语句时,显的更简便易行,所以这种措施在简练的施行逻辑前边,受到我们的热衷!

//查询语句施行:

澳门新萄京官方网站:壹次向表中插入多条数据的格局分享,使用mapper动态代理。DataTable dt=SqlServerHelper.ReadTable("select * from table1");

//插入语句试行:

SqlServerHelper.ExecuteNonQuery("insert into [students] values(@student_name,@class)",

SqlServerHelper.CreateInputParameter("@student_name", SqlDbType.NVarChar, 100, txt_student_name_sqlserver.Text),

SqlServerHelper.CreateInputParameter("@class", SqlDbType.NVarChar, 100, txt_class_sqlserver.Text)

);

轻松易行吗,这让项止显的代码又简约,又清晰!

第二种:面向对象式编制程序,其实这种语法也不复杂,只是加个using语句而己:

using (SqlServerHelper helper = new SqlServerHelper())

{

helper.Command.CommandText = "delete from [Students] where stid=@stid";

helper.AddParameter("@stid", SqlDbType. Int, student_id);

helper.Open();

helper.ExecuteNoneQuery();

helper.Command.Parameters.Clear();

helper.Command.CommandText = "select * from [澳门新萄京官方网站:壹次向表中插入多条数据的格局分享,使用mapper动态代理。Students]";return helper.ReadTable();

}

那是官方示例代码中的一某个,语法简单,在多个using语句中试行了delete删除语句和select查语句。

比方说,假若你想进行事务时,能够动用:

using (SqlServerHelper helper = new SqlServerHelper())

{

helper.Command.CommandText = "delete from [Students] where stid=@stid";

helper.AddParameter("@stid", SqlDbType. Int, student_id);

helper.Open();

DbTransaction tran = helper.Connection.BeginTransaction();

helper.Command.Transaction=tran;

try

{

helper.ExecuteNoneQuery();

tran.Rollback();

}catch { tran.Rollback(); throw; }

}

<?xml version="1.0" encoding="UTF-8" ?>

编排本段重中之重成员

在 SqlHelper 类中落到实处的主意包涵:

ExecuteNonQuery。此方式用于试行不回去任何行或值的一声令下。这几个命令日常用于实行数据库更新,但也可用以重临存款和储蓄进程的出口参数。

ExecuteReader。此格局用于重临 SqlDataReader 对象,该指标涵盖由某一指令归来的结果集。

ExecuteDataset。此方法重返 DataSet 对象,该指标涵盖由某一下令归来的结果集。

ExecuteScalar。此办法再次回到一个值。该值始终是该命令归来的率先行的率先列。

ExecuteXmlReader。此方法重临 FOEscort XML 查询的 XML 片段。

除开这一个公共措施外,SqlHelper 类还含有部分专项使用函数,用于管理参数和计划要进行的授命。不管客户端调用什么样的措施完毕,全体命令都通过 SqlCommand 对象来实行。在 SqlCommand 对象能够被实行在此以前,全部参数都必须加多到 Parameters 集结中,何况必须正确安装 Connection、CommandType、CommandText 和 Transaction 属性。SqlHelper 类中的专项使用函数首要用来提供一种同等的法子,以便向 SQL Server 数据库发出指令,而不思索客户端应用程序调用的重载艺术完毕。SqlHelper 类中的专项使用实用程序函数包涵:

AttachParameters:该函数用于将具备供给的 SqlParameter 对象连接受正在运转的 SqlCommand。

AssignParameterValues:该函数用于为 SqlParameter 对象赋值。

PrepareCommand:该函数用于对命令的属性(如接二连三、事务情状等)进行伊始化。

ExecuteReader:此专项使用 ExecuteReader 达成用于通过适当的 CommandBehavior 张开 SqlDataReader 对象,以便最得力地管理与阅读器关联的连接的保藏期。

<!DOCTYPE configuration

编排本段注意事项

1、假设利用SqlHelper方法调用数据库积存进度,要求获得存款和储蓄进程的重回值,请使用含有SqlParameter[]参数的不二法门,Object[]参数的方法不能够获得存款和储蓄进程重临值

PUBLIC "-//mybatis.org//DTD Config 3.0//EN"

编写制定本段源程序(汉语注释)

/// <summary>

/// 自定义访谈通用类

/// </summary>

public class SqlDbHelper

{

string connectionString = System.Configuration.ConfigurationManager.ConnectionStrings["conn"].ConnectionString;

/// <summary>

/// 构造函数

/// </summary>

public SqlDbHelper()

{

}

/// <summary>

/// ExecuteNonQuery操作,对数据库进行 增、删、改 操作((1)

/// </summary>

/// <param name="sql">要实行的SQL语句 </param>

/// <returns> </returns>

public int ExecuteNonQuery(string sql)

{

return ExecuteNonQuery(sql, CommandType.Text, null);

}

/// <summary>

/// ExecuteNonQuery操作,对数据库进行 增、删、改 操作(2)

/// </summary>

/// <param name="sql">要实行的SQL语句 </param>

/// <param name="commandType">要实行的查询类型(存款和储蓄进度、SQL文本) </param>

/// <returns> </returns>

public int ExecuteNonQuery(string sql, CommandType commandType)

{

return ExecuteNonQuery(sql, commandType, null);

}

/// <summary>

/// ExecuteNonQuery操作,对数据库举办 增、删、改 操作(3)

/// </summary>

/// <param name="sql">要实践的SQL语句 </param>

/// <param name="commandType">要施行的询问类型(存款和储蓄进程、SQL文本) </param>

/// <param name="parameters">参数数组 </param>

/// <returns> </returns>

public int ExecuteNonQuery(string sql, CommandType commandType, SqlParameter[] parameters)

{

int count = 0;

using (SqlConnection connection = new SqlConnection(connectionString))

{

using (SqlCommand command = new SqlCommand(sql, connection))

{

command.CommandType = commandType;

if (parameters != null)

{

foreach (SqlParameter parameter in parameters)

{

command.Parameters.Add(parameter);

}

}

connection.Open();

count = command.ExecuteNonQuery();

}

}

return count;

}

/// <summary>

/// SqlDataAdapter的Fill方法推行三个查询,并回到三个DataSet类型结果(1)

/// </summary>

/// <param name="sql">要推行的SQL语句 </param>

/// <returns> </returns>

public DataSet ExecuteDataSet(string sql)

{

return ExecuteDataSet(sql, CommandType.Text, null);

}

/// <summary>

/// SqlDataAdapter的Fill方法试行四个查询,并重临二个DataSet类型结果(2)

/// </summary>

/// <param name="sql">要实行的SQL语句 </param>

/// <param name="commandType">要试行的询问类型(存款和储蓄进程、SQL文本) </param>

/// <returns> </returns>

public DataSet ExecuteDataSet(string sql, CommandType commandType)

{

return ExecuteDataSet(sql, commandType, null);

}

/// <summary>

/// SqlDataAdapter的Fill方法实施二个询问,并重临二个DataSet类型结果(3)

/// </summary>

/// <param name="sql">要试行的SQL语句 </param>

/// <param name="commandType">要实践的询问类型(存款和储蓄进度、SQL文本) </param>

/// <param name="parameters">参数数组 </param>

/// <returns> </returns>

public DataSet ExecuteDataSet(string sql, CommandType commandType, SqlParameter[] parameters)

{

DataSet ds = new DataSet();

using (SqlConnection connection = new SqlConnection(connectionString))

{

using (SqlCommand command = new SqlCommand(sql, connection))

{

command.CommandType = commandType;

if (parameters != null)

{

foreach (SqlParameter parameter in parameters)

{

command.Parameters.Add(parameter);

}

}

SqlDataAdapter adapter = new SqlDataAdapter(command);

adapter.Fill(ds);

}

}

return ds;

}

/// <summary>

/// SqlDataAdapter的Fill方法试行一个查询,并回到三个DataTable类型结果(1)

/// </summary>

/// <param name="sql">要进行的SQL语句 </param>

/// <returns> </returns>

public DataTable ExecuteDataTable(string sql)

{

return ExecuteDataTable(sql, CommandType.Text, null);

}

/// <summary>

/// SqlDataAdapter的Fill方法实行叁个询问,并再次回到三个DataTable类型结果(2)

/// </summary>

/// <param name="sql">要推行的SQL语句 </param>

/// <param name="commandType">要实行的询问类型(存款和储蓄进程、SQL文本) </param>

/// <returns> </returns>

public DataTable ExecuteDataTable(string sql, CommandType commandType)

{

return ExecuteDataTable(sql, commandType, null);

}

/// <summary>

/// SqlDataAdapter的Fill方法施行三个询问,并再次来到三个DataTable类型结果(3)

/// </summary>

/// <param name="sql">要进行的SQL语句 </param>

/// <param name="commandType">要施行的查询类型(存款和储蓄进程、SQL文本) </param>

/// <param name="parameters">参数数组 </param>

/// <returns> </returns>

public DataTable ExecuteDataTable(string sql, CommandType commandType, SqlParameter[] parameters)

{

DataTable data = new DataTable();

using (SqlConnection connection = new SqlConnection(connectionString))

{

using (SqlCommand command = new SqlCommand(sql, connection))

{

command.CommandType = commandType;

if (parameters != null)

{

foreach (SqlParameter parameter in parameters)

{

command.Parameters.Add(parameter);

}

}

SqlDataAdapter adapter = new SqlDataAdapter(command);

adapter.Fill(data);

}

}

return data;

}

/// <summary>

/// ExecuteReader实践一查询,再次来到一SqlDataReader对象实例(1)

/// </summary>

/// <param name="sql">要试行的SQL语句 </param>

/// <returns> </returns>

public SqlDataReader ExecuteReader(string sql)

{

return ExecuteReader(sql, CommandType.Text, null);

}

/// <summary>

/// ExecuteReader试行一查询,再次来到一SqlDataReader对象实例(2)

/// </summary>

/// <param name="sql">要实施的SQL语句 </param>

/// <param name="commandType">要试行的询问类型(存款和储蓄进程、SQL文本) </param>

/// <returns> </returns>

public SqlDataReader ExecuteReader(string sql, CommandType commandType)

{

return ExecuteReader(sql, commandType, null);

}

/// <summary>

/// Execute里德r施行一查询,再次来到一SqlDataReader对象实例(3)

/// </summary>

/// <param name="sql">要实行的SQL语句 </param>

/// <param name="commandType">要施行的询问类型(存款和储蓄进度、SQL文本) </param>

/// <param name="parameters">参数数组 </param>

/// <returns> </returns>

public SqlDataReader ExecuteReader(string sql, CommandType commandType, SqlParameter[] parameters)

{

SqlConnection connection = new SqlConnection(connectionString);

SqlCommand command = new SqlCommand(sql, connection);

command.CommandType = commandType;

if (parameters != null)

{

foreach (SqlParameter parameter in parameters)

{

command.Parameters.Add(parameter);

}

}

connection.Open();

return command.ExecuteReader(CommandBehavior.CloseConnection);

}

/// <summary>

/// ExecuteScalar施行一查询,重返查询结果的第一行第一列(1)

/// </summary>

/// <param name="sql">要实行的SQL语句 </param>

/// <returns> </returns>

public Object ExecuteScalar(string sql)

{

return ExecuteScalar(sql, CommandType.Text, null);

}

/// <summary>

/// ExecuteScalar推行一查询,重回查询结果的首先行第一列(2)

/// </summary>

/// <param name="sql">要推行的SQL语句 </param>

/// <param name="commandType">要施行的查询类型(存款和储蓄进度、SQL文本) </param>

/// <returns> </returns>

public Object ExecuteScalar(string sql, CommandType commandType)

{

return ExecuteScalar(sql, commandType, null);

}

/// <summary>

/// ExecuteScalar实行一询问,再次回到查询结果的首先行第一列(3)

/// </summary>

/// <param name="sql">要试行的SQL语句 </param>

/// <param name="commandType">要实行的询问类型(存款和储蓄进度、SQL文本) </param>

/// <returns> </returns>

public Object ExecuteScalar(string sql, CommandType commandType, SqlParameter[] parameters)

{

object result = null;

using (SqlConnection connection = new SqlConnection(connectionString))

{

using (SqlCommand command = new SqlCommand(sql, connection))

{

command.CommandType = commandType;

if (parameters != null)

{

foreach (SqlParameter parameter in parameters)

{

command.Parameters.Add(parameter);

}

}

connection.Open();

result = command.ExecuteScalar();

}

}

return result;

}

/// <summary>

/// 重临当前连日的数据库中持有由用户成立的数据库

/// </summary>

/// <returns> </returns>

public DataTable GetTables()

{

DataTable data = null;

using (SqlConnection connection = new SqlConnection(connectionString))

{

connection.Open();

data = connection.GetSchema("Tables");

}

return data;

}

}

";

<configuration>

<!-- 运转景况布署 -->

<!-- default:钦命使用哪二个周转条件 -->

<environments default="development">

     <!-- id:独一标记贰个运作境遇 -->

     <environment id="development">

        <!-- 配置事务 -->

         <transactionManager type="JDBC" />

         <!-- 数据源配置 -->

         <dataSource type="POOLED">

             <property name="driver" value="com.mysql.jdbc.Driver" />

             <property name="url" value="jdbc:mysql://127.0.0.1:3306/79_mybatis" />

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

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

         </dataSource>

     </environment>

</environments>

</configuration>

2.3.准备log4j.properties

2.4.编写pojo实体类

与数据库的字段对应

2.5预备sql和mapper映射文件

2.5.1.sql语句对应增加和删除改查操作。

2.5.2.mapper映射文件就是用户配置的Java对象与sql语句的应和关系

<?xml version="1.0" encoding="UTF-8" ?>

<!DOCTYPE mapper

PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"

";

<!--namespace:名称空间,相当于java中的package,用于幸免sql语句名称抵触(sql语句的隔开)  -->

<mapper namespace="test">

<!--mybatis针对各项sql语句:新扩充/修改/删除/查询,

提供了对应的标签:insert/update/delete/select来放置-->

<!-- 依据用户Id查询用户,表明:

     select标签:用于放置查询sql语句

     id:独一标记名称

     parameterType:输入参数的门类

     resultType:输出结果的花色(须要的是全范围名称)

     #{id}:占位符,相当于jdbc中的? -->

<select id="queryUserById" parameterType="int" resultType="com.code.po.User">

     select * from `user` where id=#{id}

</select>

</mapper>

2.6.还要在主配置文件中增多对映射文件的征引

<!-- 加载mapper映射文件 -->

<mappers>

     <!-- 加载User.xml文件,表达: 1.resource:指虞升卿顿文件的地点 -->

     <mapper resource="sqlmap/User.xml"/>

</mappers>

2.7.mybatis的周转规律

澳门新萄京官方网站 7

本文由澳门新萄京官方网站发布于数据库网络,转载请注明出处:澳门新萄京官方网站:壹次向表中插入多条数据

关键词: